.Clear()的比較沒有什么意思,因為只是把DataTable清空而已,在堆中任然分配內存,一般要比較也是比較Close()方法,不過DataTable沒有這個方法
至於Dispose和null的區別就很有意思了
首先
DataTable dt = new DataTable();
你的知道dt在棧上,指向托管堆的 new DataTable()對象
而dt = null;的意思是讓 dt不指向任何對象,此時 new DataTable()這個真實的對象還在內存中,等待GC的回收(究竟什么時候回收是垃圾回收機制的問題)
而dt.Dispose();的意思是銷毀 new DataTable();這個對象,但dt仍然指向這個被銷毀的對象的地址;所以此時dt是不為null的,但它也無法使用
自己可以看下下面代碼的結果
DataTable dt = new DataTable();
dt.Dispose();
MessageBox.Show((dt == null).ToString());
在實際開發中,一般將 dt設置為null就足夠了,可以等待GC的回收。如果要使用Dispose()方法,一般是
using(DataTable dt = new DataTable())
{
}
這樣會在大括號結束的時候隱式地調用 Dispose()方法,而且dt成為一個局部變量馬上出了作用域,也不會有調用錯誤
===============================================================
如何,主動把=null的進行回收呢
===============================================================
GC.Collect();
使用此方法嘗試回收無法訪問的所有內存。
無論對象在內存中的時間有多長,所有的對象均被考慮回收;不過,在托管代碼中引用的對象不會被回收。使用此方法強制系統嘗試回收最大可用內存量。