Ist es eine gute Idee, die GetGuiResources(GetCurrentProcess(), GR_GDIOBJECTS)
zu Beginn von WinMain
und vor der letzten Rückkehr, um GDI-Lecks oder, genauer gesagt, Objekte zu entdecken, die ich vergessen habe freizugeben?
Außerdem frage ich mich gerade, warum der erste Aufruf in meinem Programm Folgendes zurückgibt 4
wenn es noch kein Fenster gibt.
Antworten
Zu viele Anzeigen?In den meisten Situationen reicht es aus, wenn Sie Prozess-Explorer . Lassen Sie das Fenster geöffnet, in dem die GDI-Handles Ihres Prozesses angezeigt werden (klicken Sie mit der rechten Maustaste auf die Spalten, wählen Sie "Select Columns" und aktivieren Sie dann das Kontrollkästchen "GDI Objects" auf der Registerkarte "Process Memory").
Beobachten Sie während der Ausführung Ihrer Anwendung die Anzahl der GDI-Handles - wenn sie ansteigt und nicht mehr zurückgeht, wissen Sie, dass Sie ein Leck haben.
Der Code mit diesem Artikel im MSDN-Magazin bot eine elegante Möglichkeit zur Fehlersuche bei GDI-Handle-Lecks. Leider scheint der Quellcode nicht mehr verfügbar zu sein...
Dadurch erfahren Sie zwar, ob Sie GDI-Objekte ausgelaufen sind, aber nicht, welche GDI-Objekte Sie ausgelaufen sind. In einem nicht-trivialen Programm, ich sehe nicht, dies sehr viel helfen.
Wenn Sie GDI-Objekte nachverfolgen wollen, gibt es meines Wissens nach einige Leistungszähler, die die Anzahl der GDI-Objekt-Handles anzeigen, die derzeit in einem Prozess zugeordnet sind. Sie können dies im Laufe der Zeit beobachten, um eine bessere Vorstellung davon zu bekommen, wo Ihr Programm undicht ist.