您好我有一個對象是一次性的,我想知道什麼是更好的:C#object.Dispose()或對象= NULL
this.object.Dispose();
或
this.object = null;
或
this.object.Dispose();
this.object = null;
您好我有一個對象是一次性的,我想知道什麼是更好的:C#object.Dispose()或對象= NULL
this.object.Dispose();
或
this.object = null;
或
this.object.Dispose();
this.object = null;
Dispose
更好,甚至更好的方法是使用using
塊內的對象並讓framewor k處置它。
對於:this.object.Dispose();
VS this.object = null;
對象設置爲null
可能導致留出未管理的資源未設置。具有IDisposable
的整個目標是確保未管理的資源在其使用後被處置。
主要採用此接口的是釋放非託管資源。 當不再使用該對象時,垃圾收集器會自動釋放分配給被管對象的內存。但是,並不是 可以預測垃圾回收何時發生。此外,垃圾收集器不知道非託管資源,如 窗口句柄或打開文件和流。
我會說調用'Dispose ''或使用'using'塊是必須的......以防萬一類的創建者沒有實現一次性模式(析構函數不調用Dispose的糟糕情況)。 –
Dispsoing更好,但如果你的資源緊張,我......,移動,那麼你應該調用null,所以你不必等待。但是如果將它設置爲null而沒有配置,在資源緊張的情況下是一個糟糕的主意,因爲您正在等待GC收集並釋放與它們相關的資源。如果對象使用硬件資源,則始終應該調用Dispose。 –
@NickTurner,將對象設置爲'null',甚至通過GC收集並不能確保'Dispose'被調用。一個好的做法是在'Finalize'中調用'Dispose',但它可能不會被遵循。一般的規則是在將其設置爲空白之前將任何實現了「IDisposable」的任何東西「Dispose」(Task :)除外)* – Habib
你只需要Dispose
對象 - 你不需要將它設置爲null
,除非有檢查空值,並適當地迴應其他代碼。
object.Dispose()或對象= NULL
什麼是處置?任何實現IDisposable的類型都有此方法(儘管您可以編寫自己的公用方法)。
public class Test:IDisposable
{
public void Dispose()
{
//release resources here managed and unmanaged
}
}
現在,你已經實現了IDisposable所以最好的方式通過使用塊框架將採取所有資源照顧這樣做是
using (Test t = new Test())
{
}
。你不必擔心。即使你在對象上釋放方法應調用Dispose()爲您
雖然另外,您也可以做
Test t = new Test();
t.Dispose();
現在怎麼樣將它設置爲空?
Test t = new Test();
t = null;
它引用的對象不再可訪問,現在可以進行垃圾收集(託管資源)。您必須自己處理未管理的資源。
處置並不比設置爲空更好或更差。他們有不同的目的。
因爲,如果正確實施,對象應該調用Dispose()方法的終結,大部分的時間你並不需要顯式調用它。只要沒有對該對象的引用,就會由垃圾回收器調用終結器方法,並因此調用Dispose方法。
類似的問題在這裏問,http://stackoverflow.com/questions/2926869/do-you-need-to-dispose-of-objects-and-set-them-to-null – Bearcat9425