我有一个类“skImage”。此类有一个私有(private)变量(具有公开它的公共(public)属性)
private Image _capturedImage;
该类的构造函数如下所示:
public skImage(Image captured) {
_capturedImage = captured;
}
它还有以下方法:
public bool Invert() {
Bitmap b = new Bitmap(_capturedImage);
unsafe {
//random code not relevant.
}
_capturedImage = b;
b.Dispose();
return true;
}
然后它有一个 save() 方法,它只调用:
_capturedImage.Save(_saveFullLocation);
现在,如果我运行 invert 方法,然后尝试调用 save,它会抛出异常(参数无效)。在谷歌搜索此异常后,我似乎正在处理该图像。我可以看到我在反转方法之后处理“b”。
我的问题是,当我执行 _capturedImage = b
时,这是否意味着两个变量现在都持有对该对象的一个引用?我不想那样。我希望 b 被销毁以释放内存,以便 GC 可以收集它。我如何将 b 传输到 _capturedImage 并销毁 b.
谢谢
最佳答案
does that mean both variables now hold one reference to the object?
是的。但是,引用只是引用 - 它不会消耗太多内存。
I want b to be destroyed
您无法销毁引用 - 您只能处置对象本身。
您应该编写以下内容,而不是处理 b:
_capturedImage.Dispose();
_capturedImage = b;
关于c# - C#如何处理内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074017/