Frage

ich in diese Ausnahme lief gestern:

Win32Exception: Fehler beim Erstellen des Fensterhandles

könnte übersetzen:

Win32Exception: Error while creating the windowhandle

Ich weiß, wie diese zu lösen (auch ein kurzes schrieben Blogbeitrag zum Thema - in Deutsch)

Aber ich weiß nicht, wo meine Anwendung könnte sein, ‚undichte‘ nicht angeordnet Bedienelemente, dass nach wie vor Fenstergriffe haben.

Gibt es eine Möglichkeit des Erfassens / Suche nach Instanzen, die

  • implementieren IDisposable
  • Haben Sie Parent == null

Objekte für diese Zwänge scheinen gute Kandidaten zu sein.

War es hilfreich?

Lösung

Jede anständige Speicher-Profiler werden Sie die Instanzen Kontrolle zeigen. Sie werden nicht Müll gesammelt, ihre Eigenschaft Handle hält sie am Leben. Es wird fast 10.000 von ihnen. Sie können sehen, es mit dem Task-Manager auch View + Spalten auswählen verwenden und Benutzer-Objekte ticken. Betrachtet man die Zählung erhöhen, wie Sie die App testen sollten einen anständigen Hinweis liefern.

Ein Code-Review sollte einen langen Weg zu gehen, auch gibt es nicht so viele Möglichkeiten, um ein Fenster zu lecken. Erster Blick für die häufigste Fall Code, Controls.Clear () oder Controls.Remove / At () ruft nicht, aber nicht auch die Steuerung verfügen. Weiter gemeinsamer Fall ist die SystemEvents Klasse, müssen Sie explizit ihre Veranstaltungen austragen. Der Rest sind nicht so leicht zu finden, können Sie diese Profiler bräuchten.

Finding die Griffe selbst zur Laufzeit ist technisch möglich, mit Reflexion. Die Griffe sind in System.Internal.HandleCollector.handleTypes [] gespeichert. Nun, technisch gesehen.

Andere Tipps

Jedes Objekt, das implementiert IDisposable eine Dispose Methode hat. Diese Methode sollte aufgerufen werden, wenn das Objekt nicht mehr benötigt wird. Ist es in einem einzigen Verfahren verwendet nur, umgeben sie mit einer using Anweisung (Anrufe Dispose automatisch). Wenn es sich um eine Membervariable der Klasse ist, sollte Ihre Klasse IDisposable selbst implementieren. FxCop hat eine Prüfungsregel für diese.

Wenn sie nicht gesammelt werden, weil einige andere Objekt Steuerelemente verweisen, weder dem Aufruf von Dispose noch Einstellung Elternteil zu null ist genug. Vielleicht dettaching Sie Befestigung an Veranstaltungen und nicht von ihnen.

überprüfen Sie speziell den Fall von Kontrollen an Veranstaltungen Befestigung nicht von dem Attacher, sollen Sie immer von den Ereignissen lösen in diesem Fall enthalten ist, wenn die Kontrollen entsorgen, wenn nicht die Kontrolle noch von der Attacher referenziert werden wird weitergehen und somit es wird nicht freigegeben

werden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top