C#弱引用

來源:互聯網
上載者:User

1、弱引用可以讓您保持對對象的引用,同時允許GC在必要時釋放對象,回收記憶體。對於那些建立便宜但耗費大量記憶體的對象,即希望保持該對象,又要在應用程式需要時使用,同時希望GC必要時回收時,可以考慮使用弱引用。

2、弱引用在引用對象的同時仍然允許對該對象進行記憶體回收。

3、實際存在的是一個對象,可以當n個來使用

4、以下是msdn中的內容

公用語言運行庫“記憶體回收”機制回收分配給對象的無法訪問的(即“不可到達的”)記憶體。如果對對象的所有引用變得無效(例如,將那些引用設定為空白引用(Visual   Basic   中為   Nothing)),則該對象成為不可到達的。

記憶體回收將調用對象的   Finalize   方法(即執行“終結”),如果存在這樣的方法並且指示這樣做。終結完成後,如果以某種方式重新擷取並重用記憶體回收對象,則將發生不可預知的結果。

被直接或間接引用的對象是“可到達的”,不允許記憶體回收行程回收它。對可到達的對象的引用稱為“強引用”。

“弱引用”也引用可到達的對象(稱為“目標”)。使用者通過將   Target   屬性的值賦給變數來擷取對目標的強引用。但是,如果沒有對目標的強引用,目標將變得符合記憶體回收條件,即使它仍然有弱引用。

在對象變為符合記憶體回收條件時的時間和它被回收的時間之間可能有一個延遲。如果使用者試圖在目標已被回收後檢索它,將只會檢索到Null 參考。如果目標尚未被回收,則將檢索到有效引用。

對象可以是已使用的(即“活著的”);變成未使用的並符合記憶體回收條件(即“死掉的”);然後再被使用(即“複活的”)。但是,如果在終結後訪問複活的對象,將導致不可預知的行為。

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.