2014-08-27 23 views
7

Lavorando su un progetto Qt di dimensioni medie abbiamo notato che il consumo di memoria è sorprendentemente alto quando non c'è molto sullo schermo. I miei tentativi di trovare qualche tipo di memleak mi hanno portato alla macro CREATE_QML_OBJECT, dove vengono creati oggetti di istanza qml. Dopo aver rimosso tutti gli elementi dell'interfaccia utente personalizzati da file QML caricato e lasciando solo quattro quelli di base ho ottenutoQt Utilizzo memoria veloce

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

E questa cosa consuma circa ~ 1-1,5 MB.

che ho avuto uno sguardo ai progetti dimostrativi QtQuick e la sua la stessa cosa ci:

Gallery demo. Solo un mucchio di controlli, 100 MB all'avvio.

Same game demo. Gioco semplice, dopo 5 minuti di riproduzione 256 MB sono finiti.

Sono davvero sorpreso dal fatto che una semplice applicazione QtQuick QML possa consumare un'enorme quantità di memoria. Qualcuno sa che cosa causa questa allocazione e c'è un modo per gestirlo?

Qualsiasi aiuto sarà molto apprezzato.


Link correlati, non hanno trovato una risposta ci

QML big memory consumption?

Memory footprint of QML applications

Performance Considerations And Suggestions

+0

Strani, gli sviluppatori di KDE hanno affermato di aver ridotto il consumo di memoria con un utilizzo QML più elevato. – QtRoS

+0

Per chiamare QML "memory hog" sarebbe un complimento. È molto peggio di quello ... – dtech

risposta

2

La sua tutti gestiti da javascript garbage collector. Pochi cosa da provare sono:

1) Chiamare gc() solo dopo aver caricato un elemento cioè sulla Component.onCompleted:

2) Caricare le voci on Loader. In questo modo, non dovrebbero rimanere in memoria quando non è in uso.

Questi non garantiscono la riduzione dell'impronta di memoria, ma può aiutare un po '.

+0

Grazie per il consiglio, ma sembra che sia proprio come qt quick dovrebbe funzionare. L'ingombro di memoria apparentemente alto non era un problema per il team di sviluppo. Forse l'idea era che dovresti implementare alcune piccole parti dell'interfaccia utente in qml. Non consiglierei di usare qtquick-only per un progetto di grandi dimensioni, i widget puri sono molto più efficienti. – vim