問題描述
如何捕獲(並希望修復)GDI 資源洩漏 (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 >>>
‑‑‑‑‑
參考解法
方法 1:
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.
方法 2:
GDIView worked for me. It pointed to a Font leak. I did a search for ToHfont(). The rest is history.