如何捕捉(并希望修复)GDI资源泄漏问题

4

我的应用程序在运行6个小时后记录了一个异常:

操作系统版本:Microsoft Windows NT 5.1.2600 Service Pack 3 (5.1.2600.196608)

.NET版本:2.0.50727.3082

SQL Server版本:9.00.4035.00

SQL Server级别:SP3

SQL Server版本:标准版

错误消息:参数无效。

异常类型:System.ArgumentException

来源: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 >>>

请问您能否发布您代码的相关部分? - ChrisF
问题的本质是关于为GUI资源泄漏对一个大型项目进行分析。如果有一个好的分析技术,我的代码就变得无关紧要了。 - GregC
为了让我开始,我已经下载了GDIView。我想非托管资源跟踪器是一个不错的起点。 - GregC
2个回答

4

最近我创建了一个简单的类,在构造函数和析构函数中调用 GetGuiResources() 函数,并报告 GDI 对象计数的差异。在几个函数中使用它作为范围对象帮助我修复代码中的 GDI 泄漏。


2
GDIView基本上做的是同样的事情...但是没有需要编写的代码。 - GregC

2

GDIView 对我很有帮助。它指出了字体泄漏的问题。我搜索了 ToHfont(),问题迎刃而解。


我希望Nir Sofer能够说出来,这样我就可以给他应得的赞扬了。 - GregC
谢谢!这刚好帮我解决了GDI句柄达到10K限制的问题。 - dtroy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接