【发布时间】:2012-01-08 07:01:12
【问题描述】:
我不太确定该怎么做。这是一个大型应用程序,我们的大多数表单上都有 GDI 对象“泄漏”。
有帮助的工具吗?有没有关于如何使用这种工具的教程?
我是否应该开始从我们的表单中删除代码,直到我缩小违规者的范围? (有很多代码)。
【问题讨论】:
-
你怎么知道你有 GDI 对象泄漏?
-
@JimMischel 如果我们多次打开和关闭某些表单,我们的应用程序将崩溃(我们最常用的表单之一在整个应用程序崩溃之前打开/关闭约 75 次)。我忘记了确切的错误是什么,但它与 Windows 中的 1,000 个句柄限制有关(1,000 是注册表设置,最多可以更改为 ~32,000)。我已经断断续续地研究了几个月(我似乎无法弄清楚我们做错了什么,因此我无法弄清楚如何解决它)。
-
@XenoPuTtSs 听起来更像是您需要使用 adplus 进行内存转储并使用带有 SOS 的 winDbg 来查看根本原因。确切的错误显然会很有帮助。
-
所以你不一定会泄漏 GDI 对象,而是句柄,可能是 GDI 对象、用户控件等。在我看来,你的程序中的某些东西正在维护对表单的引用,或者当您关闭表单时,可能是表单上的某些控件。这将阻止表单(或引用的控件)被正确处理。您是否在某处有一个持久性集合,其中包含对表单或控件的引用?