问题
无意间打开任务管理器查看程序GDI对象计数,发现程序每次最小化然后最大化后,GDI对象增1,说明GDI资源存在泄漏。
GDI资源泄漏就像牙疼一样,平时没什么感觉,最后发作的时候,可是要人命的。随着程序长时间运行,GDI资源慢慢泄漏,主要特征为任务管理器中的GDI对象计数不断增加,最后系统不堪重负,程序运行缓慢,直至最后崩溃。
开始诊断
1) 使用GDI资源泄漏工具GDIndicator,打开目标程序,列表中会显示程序使用的各项GDI资源计数。
![9b331f9d305e7d4fb7c2797a513cc60e.png](https://i-blog.csdnimg.cn/blog_migrate/60525d95202ad8a83359fb1667981d96.jpeg)
2) 随着程序运行,刷新列表,可以观察到目标程序的GDI资源计数是否一直增加。
3) 观察到Brush对象递增,说明画刷对象存在泄漏。
GDIndicator工具仅给出初级的诊断,很难找到具体泄漏的代码点。下面Deleaker登场。
需要说明的是,Deleaker是收费工具,可以提供14天的免费试用。
载入目标程序并启动调试,运行程序一段时间后,退出程序,Deleaker会给出完整泄漏报告。