我可以泄漏什么未命名的GDI资源

Ian*_*oyd 3 winapi gdi resource-leak

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

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

Process Explorer

在此输入图像描述

任务管理器

在此输入图像描述

接下来要弄清楚我正在泄漏哪种GDI资源(例如笔,画笔,位图,字体,区域,DC).为此我转向了NirSoftGDIView:

在此输入图像描述

  • 笔: 0
  • Ext Pen:0
  • 刷子:4
  • 位图:35
  • 字体:19
  • 调色板:1
  • 地区:3
  • DC:11
  • 图元文件DC:0
  • 增强型图元文件DC:0
  • 其他GDI:0
  • GDI总计:0
  • 所有GDI:10,000

GDI可以处理什么,不是任何已知的GDI类型?

Ian*_*oyd 6

答案 GDI HFONT处理.

这是一个Windows 8问题,GDIView无法显示字体句柄.

我用钩子拦截每一个电话:

  • 的CreateFont
  • DestroyFont

并记录每个句柄的创建,以及它允许​​的堆栈跟踪.最后,我可以报告任何取消删除字体.