2009-05-15 3 views
4

Meine Anwendung eine Ausnahme nach dem Ausführen von 6 Stunden protokolliert:Wie zu fangen (und hoffentlich fix) ein GDI-Ressource-Mangel

OS Version: Microsoft Windows NT 5.1.2600 Service Pack 3 (5.1.2600.196608)

.NET Version: 2.0.50727.3082

SQL Server Version: 9.00.4035.00

SQL Server Level: SP3

SQL Server Edition: Standard Edition

Fehlermeldung: Parameter ist nicht gültig.

Ausnahmetyp: System.ArgumentException

Quelle: System.Drawing

Stack Trace: 
at System.Drawing.Graphics.GetHdc() 
at System.Windows.Forms.ImageList.GetBitmap(Int32 index) 
at System.Windows.Forms.ImageList.ImageCollection.get_Item(Int32 index) 
<<< MY code >>> 
+0

Können Sie bitte den relevanten Abschnitt Ihres Codes posten. – ChrisF

+0

Das Wesen der Frage besteht darin, ein großes Projekt für GUI-Ressourcenlecks zu profilieren. Angesichts einer guten Profilierungstechnik wird mein Code irrelevant. – GregC

+0

Um mich zu starten, ging ich weiter und heruntergeladen GDIView. Ich denke, unmanaged Resource Tracker ist ein guter Anfang. – GregC

Antwort

4

Vor kurzem habe ich eine einfache Klasse erstellt, die GetGuiResources() Funktion sowohl im Konstruktor als auch im Destruktor aufruft und meldet Unterschiede in GDI-Objekt zählt. Wenn ich es in einigen Funktionen als Objekt mit beschränkter Reichweite einsetzte, half es mir, GDI-Lecks in den Code zu stecken.

+2

GDIView macht grundsätzlich das Gleiche .. Doch es gibt keinen Code zum schreiben. – GregC

2

GDIView für mich gearbeitet. Es zeigte auf ein Font-Leck. Ich habe nach ToHfont() gesucht. Der Rest ist Geschichte.

+0

Ich wünschte Nir Sofer würde sprechen, also könnte ich ihm das wohlverdiente Credo geben. – GregC

+0

Danke dafür! es hat mir nur geholfen, meine GDI-Griffe zu lösen, die das 10K-Limit erreichen. – dtroy