在Dispose()
方法中將自定義對象設置爲null
(在VB.NET中爲Nothing
)有什麼意義嗎? 這可以防止內存泄漏或它沒用??在Dispose()中設置obj = null(Nothing)的任何意義?
讓我們來看兩個例子:
public class Foo : IDisposable
{
private Bar bar; // standard custom .NET object
public Foo(Bar bar) {
this.bar = bar;
}
public void Dispose() {
bar = null; // any sense?
}
}
public class Foo : RichTextBox
{
// this could be also: GDI+, TCP socket, SQl Connection, other "heavy" object
private Bitmap backImage;
public Foo(Bitmap backImage) {
this.backImage = backImage;
}
protected override void Dispose(bool disposing) {
if (disposing) {
backImage = null; // any sense?
}
}
}
在我的第二個例子中,我有一個位圖,建議Dispose()。現在,由於位圖不是由對象Foo創建的,而是剛剛通過參數傳遞的,所以我不能這樣做。我認爲至少將它設置爲空... – serhio 2010-02-17 11:13:19
你總是需要決定清理依賴關係的地方。如果你知道位圖沒有在其他地方使用,Foo應該調用Dispose()。否則,它應該離開它,並讓來電者處理清理。 將本地引用設置爲null沒有其他好處。當Foo的實例被回收時,除非調用者仍然持有對它的引用,否則是Bitmap的實例。 – 2010-02-17 11:18:01
@serhio - 如果你想釋放你的Bitmap對象使用的資源,只要你在Foo中使用它(沒有其他人正在使用它),那麼Foo.Dispose應該調用backImage.Dispose – Gishu 2010-02-17 11:19:38