我有一个类“skImage”。这个类有一个私有变量(与公开它的公共属性)c#如何处理内存
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);
现在,如果我运行翻转方法,然后尝试调用保存它会引发异常(参数无效)。谷歌搜索这个例外后,似乎我正在处理图像。我可以看到,我在倒置方法之后部署了“b”。
我的问题是,当我做_capturedImage = b
这是否意味着这两个变量现在持有一个对象的引用?我不想那样。我希望b被销毁以减轻记忆,因此GC可以收集它。我如何将b传递给_capturedImage并销毁b。
感谢
将意味着当b超出范围(即方法已完成)GC将收集b并释放与其关联的所有内存? – masfenix 2010-01-15 19:09:22
@masfenix - 引用b在Invert方法的堆栈框架上创建 - 当该方法返回时,b将不再存在。但是,b引用的对象(位图)仍将存在于堆上(直到它被垃圾收集为止)。 – mbeckish 2010-01-15 19:13:20
要添加到mbeckish的评论中,该对象将不会被垃圾收集(嗯,现在不是),因为位图仍然由_capturedImage指向。 – Brian 2010-01-15 19:17:23