2014-08-27 13 views
7

Wir haben an einem mittelgroßen Qt-Projekt festgestellt, dass der Speicherverbrauch erstaunlich hoch ist, wenn auf dem Bildschirm nicht viel los ist. Meine Versuche, eine Art Memleak zu finden, führten mich zum Makro CREATE_QML_OBJECT, wo qml-Instanzobjekte erstellt werden. Nach dem Entfernen aller benutzerdefinierten UI-Elemente aus geladenen qml Datei und verlassen nur vier grundlegenden diejenigen bekam ichQt Schnelle Speichernutzung

Rectangle { 
    Button {} 
    CheckBox {} 
    Slider {} 
    TextField {} 
} 

Und dieses Ding verbraucht etwa ~ 1-1,5 MB.

Gallery demo:

Ich habe einen Blick auf QtQuick Demo-Projekte und ihr die gleiche Sache dort hatte. Nur ein paar Steuerelemente, 100 MB beim Start.

Same game demo. Einfaches Spiel, nach 5 Minuten spielen 256MB sind weg.

Ich bin wirklich überrascht von der Tatsache, dass eine einfache QtQuick QML-Anwendung enorme Menge an Speicher essen kann. Weiß jemand, was diese Zuweisungen verursacht und gibt es eine Möglichkeit, sie zu verwalten?

Jede Hilfe wird sehr geschätzt.


Related Links, keine Antwort gibt

QML big memory consumption?

Memory footprint of QML applications

Performance Considerations And Suggestions

+0

Seltsam, KDE-Entwickler sagten, dass sie Speicherverbrauch mit höherer QML-Nutzung reduziert. – QtRoS

+0

QML "Speicher Schwein" zu nennen wäre ein Kompliment. Es ist viel schlimmer als das ... – dtech

Antwort

2

Its all verwaltet von Javascript-Garbage-Collector gefunden. Wenige, was zu versuchen, sind:

1) Rufen Sie gc() kurz nach ein Element Laden heißt auf Component.onCompleted:

2) Legen Sie die Elemente auf Loader. Auf diese Weise sollten sie nicht in Erinnerung bleiben, wenn sie nicht verwendet werden.

Diese garantieren keine Reduzierung des Speicherbedarfs, können aber ein wenig helfen.

+0

Danke für den Rat, aber es scheint, dass es nur, wie qt schnell funktionieren soll. Offensichtlich war ein hoher Speicherbedarf für das Entwicklungsteam kein Thema. Vielleicht war die Idee, dass Sie einige kleine Teile Ihrer Benutzeroberfläche in qml implementieren sollten. Ich würde nicht empfehlen qtquick-only für ein großes Projekt zu verwenden, reine Widgets sind viel effizienter. – vim