c#中的弱引用:WeakReference
阿新 • • 發佈:2019-01-25
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類建立弱引用。因為物件可能在任意時刻被回收,所以在引用前必須確認它存在。
弱引用的作用就是防止記憶體洩露。