C#WeakReference弱引用

來源:互聯網
上載者:User

標籤:跟蹤   需要   成員   程式   png   final   archive   nal   微博   

 

弱引用:在引用對象的同時,允許記憶體回收該對象。

.NET中提供了WeakReference對象來實現這個功能。

對於那些建立便宜但耗費大量記憶體的對象,即希望保持該對象,又要在應用程式需要時使用,

同時希望GC必要時回收時,可以考慮使用弱引用。弱引用使用起來很簡單,

 

WeakReference w = new WeakReference(xml);//建立若引用對象
if (w.IsAlive)//判斷是否已被記憶體回收
{
XmlDocument xml1 = w.Target as XmlDocument;//轉換為指定的物件類型給你

}

 

WeakReference的建構函式有兩個重載。

下面的這些話是引用別人的微博,因為自身不太理解,就不多述。

原文出自:http://www.cnblogs.com/jeekun/archive/2011/10/09/2203712.html

前面的文章中我提到過需要Finalize的對象在最終釋放前會有一 次複活,我們大概可以猜到第二個參數表示的意思了。如果我們第二個參數給false,這個弱引用就是一個short weak reference(短弱引用),當GC回收時,發現沒有這個對象的引用了,就認為這個對象無用,這時短弱引用對這個對象的跟蹤到此為止,弱引用的 Target被設定為null。前面的一個參數的建構函式版本建立的弱引用為短弱引用。如果第二個參數給true,這個弱引用就是一個long weak reference(長弱引用)。在對象的Finalize方法沒有被執行以前,Target都可用。不過這是對象的某些成員變數也許已經被回收,所以使 用起來要想當小心。
現在讓我們看看WeakReference是如何?的。很顯然WeakReference不能直接的引用目標對象,WeakReference的 Target屬性的get/set是兩個函數,從某處查到目標對象的引用返回,而不是我們最常用寫的那樣直接返回或者設定一個私人變數。GC維護了兩個列 表來跟蹤兩種弱引用的目標對象,在一個 WeakReference對象建立時,它在相應的列表中找到一個位置,將目標對象的引用放入,很顯然,這兩個列表不是根的一部分。在GC進行記憶體回收的 時候,如果要回收某一個對象,會檢查弱引用的列表,如果儲存著這個對象的引用,則將其設為null。 

C#WeakReference弱引用

相關文章

聯繫我們

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