C#的弱引用 關於C#中的弱引用

關於C#中的弱引用

一:什麼是弱引用html

      瞭解弱引用以前,先了解一下什麼是強引用網絡

  例如 : Object obj=new Object();     就是一個強引用,內存分配一份空間給用以存儲Object數據,這塊內存有一個首地址,也就是obj所保存的數據,內存分配的空間中不單單保存着Object對象信息,還保存着本身(Object自己)被引用的次數。app

  當一個對象被強引用的形式建立的時候,自己被引用的次數已經爲1.異步

  接着Object o=obj; 這句代碼執行以後,obj指向的Object的存儲空間已經被引用了2次,因此Object保存的被引用數值爲2.函數

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

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

二:弱引用有什麼做用3d

  防止內存泄露。htm

  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

相關文章
相關標籤/搜索