简体   繁体   中英

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

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.

GDIView worked for me. It pointed to a Font leak. I did a search for ToHfont(). The rest is history.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM