Programmier-, Qt- oder Xorg-Fehler?
Verfasst: 14. Juli 2008 12:51
Hallo,
Wir haben hier ein kleines Problem, für das wir zwar inzwishcen einen Workaround haben, wo uns aber doch interessiert, wo genau der Fehler liegen könnte:
Eine Anwendung, die nichts anderes macht, als immer wieder neue Widgets auf und wieder abzubauen, führt dazu, daß der Speicherverbrauch der Anwendung und - im gleichen Maß - des Prozesses Xorg (ich nehme mal an, der XServer) kontinuierlich ansteigt, also ein typisches memory leak.
Durch kontinuierlich Reduktion des Codes konnten wir nachweisen, daß das Memory leak nur dann auftritt, wenn in der Routine onPaintEvent() das
lokale QPainter-Objekt via
erzeugt wird, also der in der Dokumentation allgemein vorgeschlagene Weg. Erzeugt man das Objekt mit dem Standard-Konstruktor und verwendet die Funktionen begin() und end(), so tritt kein Memory Leak auf, d.h. Wenn die funktion onPaintEvent wie folgt aufgebaut ist:
Interessanterweise tritt das Memory-Leak nur auf unserem Zielsystem, einem Display mit einem abgespeckten GNU Linux, auf dem PC (Kubuntu 6.06) tritt das Problem nicht auf. Qt-Version ist Qt 4.1.4.
Kennt jemand das Problem oder kann mir einen Tip geben, wo das Problem liegen könnte?
Gruß
Tilman Räger[/code]
Wir haben hier ein kleines Problem, für das wir zwar inzwishcen einen Workaround haben, wo uns aber doch interessiert, wo genau der Fehler liegen könnte:
Eine Anwendung, die nichts anderes macht, als immer wieder neue Widgets auf und wieder abzubauen, führt dazu, daß der Speicherverbrauch der Anwendung und - im gleichen Maß - des Prozesses Xorg (ich nehme mal an, der XServer) kontinuierlich ansteigt, also ein typisches memory leak.
Durch kontinuierlich Reduktion des Codes konnten wir nachweisen, daß das Memory leak nur dann auftritt, wenn in der Routine onPaintEvent() das
lokale QPainter-Objekt via
Code: Alles auswählen
QPainter painter(this);Code: Alles auswählen
{
QPainter painter;
painter.begin(this);
// Zeichenfunktionen
painter.end();
}Kennt jemand das Problem oder kann mir einen Tip geben, wo das Problem liegen könnte?
Gruß
Tilman Räger[/code]