如果我有一些Bitmap bmp1
,并将一个PictureBox.Image
设置为该bmp1
,然后稍后将其设置为Bitmap bmp2
,那么bmp1
是否由PictureBox
正确处理,或者一旦我将Image
更改为bmp2
,我是否需要保留对它的bmp1
和Dispose
的引用?
PictureBox
不知道您是否想要处理图像——您可能正在应用程序的其他地方使用它。因此,它没有显式地Dispose
。如果PictureBox
保存了对它的最后一个引用,它就有资格进行垃圾回收,并且Dispose
将作为终结的一部分被调用,但何时调用取决于垃圾收集器。与此同时,尚未处理的Bitmap
正在消耗非托管资源,并且很可能会打开一个流,这将阻止对源文件的修改,因此"随时"清理是不好的做法。
如果你知道在更改PictureBox.Image
指向的内容时你已经完成了Bitmap
,那么在那里添加额外的几行来处理旧的,你就完成了:
Image tmp = myPictureBox.Image;
myPictureBox.Image = newImage;
if (tmp != null)
{
tmp.Dispose();
}