儘早地將變數置null?

來源:互聯網
上載者:User
儘早地將變數置null?

用C++的開發人員大多養成了儘早釋放資源的好習慣,在轉移到dotNet平台後,也要堅持將用完的引用型變數置null,以便GC能夠儘快地回收記憶體。果真如此嗎?

DotNet的GC是分代式的,目前是四代,生存期最長的在第一代,最短的同時也是最近分配的在第四代。第四代的空間很小,不到一兆。GC在嘗試分配記憶體失敗時才啟動一次回收,絕大多數的回收只發生在第四代,因為其空間小,回收的花的時間也很少。

以以下代碼為例:
void Foo()
{
    string str = DateTime.Now.ToString();
    Console.WriteLine(str);
    str = null;
    for (int i=0; i<10; i++)
        Console.WriteLine(i);
}

在Debug模式下,str的生存期由構造出來到以上函數運行結束,這時將str置null確實可以讓對象提早適合回收。但在Release模式下,str的生存期只到計算完Console.WriteLine()的參數之後,也就是說str = null完全是多餘的,並且編譯器也會把它最佳化掉。

所以,用完的局部變數置null是徒勞的。

但對實現IDisposable介面的類,在Dispose()時將參考型別的資料成員置null是有意義的。因為儘管對象已經被Dispose了,但還有可能有對該對象的引用,使它暫時還不能被回收。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.