Search code examples
c#user-interfacegdiresourcesmemory-leaks

How to catch (and hopefully fix) a GDI resource leak


My application logs an exception after running for 6 hours:

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

Error Message: Parameter is not valid.

Exception type: System.ArgumentException

Source: 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 >>>

Solution

  • Recently I've created a simple class that calls GetGuiResources() function in both the constructor and destructor and reports any differences in GDI object counts. Using it as a scoped object in a few functions helped me plug GDI leaks in the code.