我有一個類「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