SQL Server 基礎知識-DataTable的 .Dispose(); .Clear(); = null;

來源:互聯網
上載者:User

標籤:

.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();

使用此方法嘗試回收無法訪問的所有記憶體。

無論對象在記憶體中的時間有多長,所有的對象均被考慮回收;不過,在Managed 程式碼中引用的對象不會被回收。使用此方法強制系統嘗試回收最大可用記憶體量。

SQL Server 基礎知識-DataTable的 .Dispose(); .Clear(); = null;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.