如何洞察 C# 程序的 GDI 句柄泄露

💡 原文中文,约5500字,阅读约需13分钟。
📝

内容提要

本文介绍如何洞察GDI泄露问题,通过测试小案例观察GDI句柄是否异常,介绍GDI句柄表的维护方式和GDIView.exe工具,最后介绍如何寻找Bitmap底层函数。

🎯

关键要点

  • 背景部分提到程序界面操作缓慢,GDI句柄数量异常。
  • GDI句柄类型包括pen、font、bitmap、device等,示例代码展示了bitmap句柄泄露。
  • 观察GDI泄露的简单方法是查看任务管理器中的GDI对象,但需进一步分析句柄类型。
  • GDI句柄表维护在用户态的虚拟地址上,可以通过脚本和GDICELL结构体分析句柄类型。
  • GDIView.exe工具可以帮助查看各个句柄的统计信息,快速定位泄露类型。
  • GDI的逻辑封装在GDI32.dll中,可以在此模块中设置断点以查找问题。
  • 使用Windbg的bm命令可以对方法名进行模糊断点,快速找到相关函数。
  • 通过观察输出信息,可以进一步缩小问题范围,找到具体的泄露源。
➡️

继续阅读