C#的弱引用

來源:互聯網
上載者:User

標籤:資料   obj   回調   lang   cve   targe   強引用   存在   object   

一:什麼是弱引用

      瞭解弱引用之前,先瞭解一下什麼是強引用

  例如 : Object obj=new Object();     就是一個強引用,記憶體配置一份空間給用以儲存Object資料,這塊記憶體有一個首地址,也就是obj所儲存的資料,記憶體配置的空間中不僅僅儲存著Object對象資訊,還儲存著自己(Object本身)被引用的次數。

  當一個對象被強引用的形式建立的時候,本身被引用的次數已經為1.

  接著Object o=obj; 這句代碼執行之後,obj指向的Object的儲存空間已經被引用了2次,所以Object儲存的被引用數值為2.

  總結:強引用最終導致的結果就是被引用的對象的被引用次數+1;

  相反的弱引用就是不會對被引用對象的被引用次數有任何影響。

二:弱引用有什麼作用

  防止記憶體泄露。

  Object obj=new Object();

  當你在通過非同步形式訪問網路上面的資源的時候,需要的時間可能會比較長,在資料返回之前,使用者很可能轉向了其他的頁面,如果非同步訪問的對象(obj)對本地的一個對象(Object)是強引用的話,那麼在這個非同步訪問對象(obj)被釋放之前,也即在資料被回調之前,這個被引用的對象(Object)是不會被銷毀的,這樣一來,就導致記憶體一直被佔用。

  WeakReference weakObj=new WeakReference(Object);

  此時就可以使用弱引用,弱引用對象(weakObj)發出非同步請求,在回調之前,如果使用者要轉到其他的頁面,這個被引用的對象(Object)是可以被釋放的,這樣子就不會出現記憶體一直被佔用的現象。

三:怎樣使用弱引用

  弱引用類: WeakReference //有兩個重載的建構函式

  WeakReference WeakObj=new WeakReference(Object);//弱引用方式

  IsAlive屬性是判斷此弱引用對象所引用的對象是否還存在,存在:IsAlive=True;

     Target屬性是設定該弱引用對象所引用的資料對象的值

     MSDN: http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.WEAKREFERENCE%29;k%28WEAKREFERENCE%29;k%28TargetFrameworkMoniker-%22SILVERLIGHT%2cVERSION%3dV4.0%22%29;k%28DevLang-CSHARP%29&rd=true

C#的弱引用

聯繫我們

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