c#中的弱引用:WeakReference


1.強引用

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

2.弱引用

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

3.WeakReference

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM