1. 程式人生 > >c#中的弱引用:WeakReference

c#中的弱引用:WeakReference

1. 強型別

我們例項化一個物件,直接引用了這個物件就是強引用。在這個物件被強引用的時,GC無法回收這個物件。
只有當該物件所有的強引用都失去的時候,GC才會回收該物件。

2. 弱引用

弱引用可以讓您保持對物件的引用,同時允許GC在必要時釋放物件,回收記憶體。
一般使用場景:物件過大,並且不經常訪問。這樣我們就可以建立一個弱引用,
當不常用該物件的時候,GC可以回收該物件,當需要引用物件,可以先判斷弱引用的物件是不是存在
,如果存在,就直接使用,如果弱引用的物件已經被回收,那就重新建立一個物件來使用。

3. 使用

            Person person = new
Person() { Id = 1, Name = "demo" }; //例項化弱引用傳遞一個物件 WeakReference wk = new WeakReference(person); Person p1; if (wk.IsAlive) //如果person沒有被回收 { p1 = wk.Target as Person; //直接引用原物件 } else //如果person已經被回收了 重新建立一個物件
{ p1 = new Person() { Id = 1, Name = "demo" }; }

4. 總結

弱引用執行建立和使用物件,但是垃圾回收器執行時,就會回收物件釋放記憶體。
但始終存在這樣的風險:垃圾回收器在重新建立強引用之前先處理該物件。但是在特定的情況下使用弱引用是很合理的。
使用 WeakReference類建立弱引用。因為物件可能在任意時刻被回收,所以在引用前必須確認它存在。
弱引用的作用就是防止記憶體洩露。