天天看点

工作学习笔记——GDI泄露检测利器

工作学习笔记——GDI泄露检测利器

另外,关于泄露为什么会发生,我还有些疑问。经检查,泄漏点是这样的C#代码

void doSomeThing()

{

Bitmap tmpBmp = new Bitmap(100,100);

return transformBmp(tmpBmp); //这里对tmpBmp放大后存到一张新位图上返回,并没有再引用tmpBmp

}

泄露的是tmpBmp。按我对垃圾回收的理解,出了这个函数,tmpBmp的生命期也就结束了,应该可以被回收掉。实际发生的是,如果不加一句tmpBmp.Dispose(),gdi资源会一直增加,直到弹出资源耗尽的警告对话框。

在MSDN上查了一下,Bitmap对gdi资源的释放是在它的finalize方法里,但是这个方法不一定保证会执行(比如它被别的finalize方法阻塞了)。不知道我这里碰到的,属不属于这种情况。