我可能会泄露哪些未命名的 GDI 资源

What unnamed GDI resources could I be leaking

我 运行 对我的应用程序进行了夜间压力测试,当我今天早上进来时,软件因 Windows 错误而崩溃。

发生错误是因为进程明显超出了 GDI 句柄:

进程资源管理器

任务管理器

接下来要弄清楚我泄漏的是哪种 GDI 资源(例如 Pen、Brush、Bitmap、Font、Region、DC)。为此,我求助于 NirSoft's GDIView:

GDI 句柄是什么,不是任何已知的 GDI 类型?

答案 GDI HFONT 句柄。

GDIView 无法显示字体句柄是 Windows8 问题。

我使用 hooking 来拦截每次调用:

  • 创建字体
  • 销毁字体

并记录每个句柄的创建,以及它何时被允许的堆栈跟踪。最后我创建了所有未删除的 HFONTs.

的报告