【发布时间】:2020-07-08 04:55:04
【问题描述】:
我的代码如下所示:
Bitmap b = new Bitmap(...); //doesn't matter how this image is constructed
pictureBox1.Image = b;
//b.Dispose() placed here crashes the application and so does "using" if used on the declaration of 'b'
由于在 C# 中您应该处置所有 IDisposable,因此需要在某个时候处置此图像。似乎属性PictureBox.Image 只制作了一个浅拷贝,所以我需要在图像停留在盒子中的整个过程中保持对象的活动状态(也就是它的Dispose())。如果我稍后更改框中的图像:
pictureBox1.Image = b2;
物业会为我处置吗?还是我应该手动操作:
Image im = pictureBox1.Image;
pictureBox1.Image = b2;
im.Dispose();
【问题讨论】:
-
"好像属性 PictureBox.Image 只做浅拷贝,"是什么让你这么想的?
-
如果一次性模式被正确实现,没有人需要丢弃它。 Image 本身将与垃圾收集器协同工作。
-
@DStanley 因为如果它是深拷贝,当我处理
b时,应用程序不会崩溃(查看注释行) -
@DarkAtom 这实际上是一个引用赋值,我想它在某些方面是一个非常浅拷贝。
-
@DStanley Okok 这只是术语,我明白了 :)) 我一直认为分配 2 个引用称为浅拷贝,因为 2 将引用同一个对象。