Hallo,
ich bin Entwickler eines Kundenverwaltungsprogrammes. Dieses Projekt habe ich geerbt, leider kann ich
keinen mehr Fragen, die dieses ursprünglich entwickelt haben.
Nun zu meinem Problem beim Öffnen einer QML werden ca. 90 MB in den Speicher geladen. Die Informationen
wie beim Knopfdruck, Feldeingabe oder ähnliches vorgaben werden soll wird aus einer SQL Datenbank
geholt. Ohne irrgendeine Eingabe wird die Maske wieder geschlossen, aber die 90 MB bleiben im Speicher.
Erst wenn die komplette Anwendung geschlossen wird der Speicher wieder frei gegeben.
Ich arbeite mit dem QT5.9 und unter Windows.
Die jeweilige QML wird über C++ gestartet und auch wieder geschlossen. Hat jemand eine Idee wie ich den
Übeltäter finde, der mir meinen Speicher raubt?
Speicherfresser
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Speicherfresser
Linux: valgrind
Wobei es kein Speicherfresser ist - C++ und vor allem OpenGL allokieren Speicher der bei der Freigabe nicht wieder ans OS zurückgegeben wird.
Problematisch wäre es, wenn der Speicher ständig immer weiter ansteigen würde.
Wobei es kein Speicherfresser ist - C++ und vor allem OpenGL allokieren Speicher der bei der Freigabe nicht wieder ans OS zurückgegeben wird.
Problematisch wäre es, wenn der Speicher ständig immer weiter ansteigen würde.
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Speicherfresser
Danke für die schnelle Antwort.
Ist es möglich mit valgrind eine Windowsanwendung zu prüfen?
Ich habe genau das Problem, mit jedem öffnen einer QML wird mir der Speicher gefressen und nach ca 20 bis 25 Masken öffnen und schließen ist es vorbei und das Programm stürzt ab.
Ist es möglich mit valgrind eine Windowsanwendung zu prüfen?
Ich habe genau das Problem, mit jedem öffnen einer QML wird mir der Speicher gefressen und nach ca 20 bis 25 Masken öffnen und schließen ist es vorbei und das Programm stürzt ab.
Re: Speicherfresser
Da ich mein Problem noch immer nicht gelöst habe versuche ich mal weiter:
Meine Masken öffne ich so:
In der Kasse wird dieses getan:
Im Create dieses:
Das Schließen wird so ausgelöst:
Am Destruktor von TMaskeD kommt man vorbei.
Muss noch mehr getan werden, damit die QML aus dem Speicher entfernt wird, oder sollte dieses reichen?
Vielleicht kann mir ja doch noch jemand helfen.
Danke
Mandy
Meine Masken öffne ich so:
Code: Alles auswählen
TMaskeD* maske = new TMaskeD( this, this, resource, maskId, flags );
if( maske->isComponentReady() )
{
maske->Create();
maske->Execute();
m_dialogs.push_back(maske);
}
Code: Alles auswählen
m_engine = new QQmlEngine();
m_engine->rootContext()->setContextProperty( "xxx", QVariant::fromValue( this ) );
m_component = new QQmlComponent( m_engine, QUrl(m_dlgResourceName) );
Code: Alles auswählen
m_visual = m_component->create();
Code: Alles auswählen
QMetaObject::invokeMethod( m_visual, "close", Qt::QueuedConnection );
Muss noch mehr getan werden, damit die QML aus dem Speicher entfernt wird, oder sollte dieses reichen?
Vielleicht kann mir ja doch noch jemand helfen.
Danke
Mandy