我可能会泄露哪些未命名的 GDI 资源
What unnamed GDI resources could I be leaking
我 运行 对我的应用程序进行了夜间压力测试,当我今天早上进来时,软件因 Windows 错误而崩溃。
发生错误是因为进程明显超出了 GDI 句柄:
进程资源管理器
任务管理器
接下来要弄清楚我泄漏的是哪种 GDI 资源(例如 Pen、Brush、Bitmap、Font、Region、DC)。为此,我求助于 NirSoft's GDIView:
- 笔数:0
- 外接笔: 0
- 笔刷: 4
- 位图: 35
- 字体: 19
- 调色板: 1
- 地区: 3
- DC: 11
- 图元文件 DC: 0
- 增强图元文件 DC: 0
- 其他 GDI: 0
- GDI 总数: 0
- 所有 GDI:10,000
GDI 句柄是什么,不是任何已知的 GDI 类型?
答案是 GDI HFONT
句柄。
GDIView 无法显示字体句柄是 Windows8 问题。
我使用 hooking 来拦截每次调用:
- 创建字体
- 销毁字体
并记录每个句柄的创建,以及它何时被允许的堆栈跟踪。最后我创建了所有未删除的 HFONT
s.
的报告
我 运行 对我的应用程序进行了夜间压力测试,当我今天早上进来时,软件因 Windows 错误而崩溃。
发生错误是因为进程明显超出了 GDI 句柄:
进程资源管理器
任务管理器
接下来要弄清楚我泄漏的是哪种 GDI 资源(例如 Pen、Brush、Bitmap、Font、Region、DC)。为此,我求助于 NirSoft's GDIView:
- 笔数:0
- 外接笔: 0
- 笔刷: 4
- 位图: 35
- 字体: 19
- 调色板: 1
- 地区: 3
- DC: 11
- 图元文件 DC: 0
- 增强图元文件 DC: 0
- 其他 GDI: 0
- GDI 总数: 0
- 所有 GDI:10,000
GDI 句柄是什么,不是任何已知的 GDI 类型?
答案是 GDI HFONT
句柄。
GDIView 无法显示字体句柄是 Windows8 问题。
我使用 hooking 来拦截每次调用:
- 创建字体
- 销毁字体
并记录每个句柄的创建,以及它何时被允许的堆栈跟踪。最后我创建了所有未删除的 HFONT
s.