c#中的弱引用:WeakReference

1.強引用

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

2.弱引用

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

3.WeakReference

C#中采用WeakReference來創建弱引用。直接演示一個代碼:

            //實例化弱引用傳遞一個對象
            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類創建弱引用。因為對象可能在任意時刻被回收,所以在引用前必須確認它存在。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容