![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuUWOjZWZhRDZmJ2NhJGZyM2M3MGO0EzYwATZlRDM2QTYfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.gif)
另外,关于泄露为什么会发生,我还有些疑问。经检查,泄漏点是这样的C#代码
void doSomeThing()
{
Bitmap tmpBmp = new Bitmap(100,100);
return transformBmp(tmpBmp); //这里对tmpBmp放大后存到一张新位图上返回,并没有再引用tmpBmp
}
泄露的是tmpBmp。按我对垃圾回收的理解,出了这个函数,tmpBmp的生命期也就结束了,应该可以被回收掉。实际发生的是,如果不加一句tmpBmp.Dispose(),gdi资源会一直增加,直到弹出资源耗尽的警告对话框。
在MSDN上查了一下,Bitmap对gdi资源的释放是在它的finalize方法里,但是这个方法不一定保证会执行(比如它被别的finalize方法阻塞了)。不知道我这里碰到的,属不属于这种情况。