最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中弱引用使用小結(jié)

 更新時(shí)間:2025年12月19日 10:59:00   作者:淺陌sss  
弱引用是一種不會(huì)阻止垃圾回收的對(duì)象引用,適用于緩存和事件監(jiān)聽等場(chǎng)景,但需注意其不確定性和潛在的性能影響,下面就來詳細(xì)的介紹C#中弱引用使用小結(jié),感興趣的可以了解一下

弱引用(Weak Reference)是一種特殊的引用類型,它允許你引用一個(gè)對(duì)象,但不會(huì)阻止該對(duì)象被垃圾回收器(GC)回收。弱引用通常用于需要緩存或跟蹤對(duì)象,但又不希望因保留引用而導(dǎo)致內(nèi)存泄漏的場(chǎng)景。弱引用對(duì)小對(duì)象沒有意義,因?yàn)槿跻糜凶约旱拈_銷,這個(gè)開銷可能比小對(duì)象更大。

核心概念??

??與強(qiáng)引用的區(qū)別??
??強(qiáng)引用??:普通對(duì)象引用(如 var obj = new MyClass())會(huì)阻止 GC 回收對(duì)象。
??弱引用??:不會(huì)阻止 GC 回收對(duì)象。當(dāng)對(duì)象只有弱引用時(shí),GC 可以隨時(shí)回收它。
??用途??
緩存大型數(shù)據(jù)(如圖片、文件等),當(dāng)內(nèi)存不足時(shí)自動(dòng)釋放。
避免因長期持有對(duì)象引用而導(dǎo)致內(nèi)存泄漏。
監(jiān)聽事件或觀察對(duì)象生命周期,但不干預(yù)其回收。

使用:

1.基礎(chǔ)使用:

代碼:

public class WeakReferenceTest : MonoBehaviour
{
    WeakReference weakRef;
    // Start is called before the first frame update
    void Start()
    {
        // 創(chuàng)建一個(gè)對(duì)象
        var myObject = new TestWeakReferenceObj();

        // 創(chuàng)建弱引用
        weakRef = new WeakReference(myObject);

        // 解除強(qiáng)引用,只保留弱引用
        myObject = null;

        // 通過弱引用訪問對(duì)象
        if (weakRef.IsAlive)
        {
            var obj = weakRef.Target as TestWeakReferenceObj;
            obj.DoSomething();
        }
        else
        {
            Debug.Log("對(duì)象已被回收");
        }
    }

    // Update is called once per frame
    void Update()
    {
        // 通過弱引用訪問對(duì)象
        if (weakRef.IsAlive)
        {
            var obj = weakRef.Target as TestWeakReferenceObj;
            obj.DoSomething();
        }
        else
        {
            Debug.Log("對(duì)象已被回收");
        }
    }
}

class TestWeakReferenceObj { 
    public void DoSomething()
    {
        Debug.Log("對(duì)象沒有被回收");
    }
}

結(jié)果:

2.泛型使用:

代碼:

public class WeakReferenceTest : MonoBehaviour
{
    WeakReference<TestWeakReferenceObj> weakRefGeneric;
    // Start is called before the first frame update
    void Start()
    {
        weakRefGeneric = new WeakReference<TestWeakReferenceObj>(new TestWeakReferenceObj());

        if (weakRefGeneric.TryGetTarget(out TestWeakReferenceObj obj))
        {
            obj.DoSomething();
        }
        else
        {
            Debug.Log("對(duì)象已被回收");
        }
    }

    // Update is called once per frame
    void Update()
    {
        if (weakRefGeneric.TryGetTarget(out TestWeakReferenceObj obj))
        {
            obj.DoSomething();
        }
        else
        {
            Debug.Log("對(duì)象已被回收");
        }
    }
}

class TestWeakReferenceObj { 
    public void DoSomething()
    {
        Debug.Log("對(duì)象沒有被回收");
    }
}

結(jié)果:

適用場(chǎng)景:

??緩存??:緩存大型對(duì)象,但允許 GC 在需要時(shí)回收它們。
事件監(jiān)聽??:避免事件訂閱導(dǎo)致的內(nèi)存泄漏。
??對(duì)象生命周期跟蹤??:觀察對(duì)象是否存活,但不阻止其回收。


性能??:頻繁檢查弱引用是否存在可能影響性能。
??不確定性??:對(duì)象可能在任何時(shí)候被回收,需始終檢查 IsAlive 或 TryGetTarget。
??短期弱引用(Short Weak Reference)??:默認(rèn)行為,GC 回收后弱引用自動(dòng)失效。
??長期弱引用(Long Weak Reference)??:通過 WeakReference 構(gòu)造函數(shù)指定 trackResurrection 為 true,可跟蹤對(duì)象在終結(jié)后的狀態(tài)(但極少使用)。

總結(jié):

弱引用是 C# 中管理內(nèi)存的一種高級(jí)機(jī)制,適用于需要靈活控制對(duì)象生命周期的場(chǎng)景。正確使用它可以優(yōu)化內(nèi)存使用,但需謹(jǐn)慎處理對(duì)象可能隨時(shí)被回收的情況。

到此這篇關(guān)于C#中弱引用使用小結(jié)的文章就介紹到這了,更多相關(guān)C# 弱引用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

巴东县| 丹寨县| 准格尔旗| 阳曲县| 宁武县| 莒南县| 胶州市| 天全县| 甘德县| 潜山县| 东明县| 田林县| 乡城县| 蒲江县| 获嘉县| 沁水县| 大同县| 咸阳市| 三穗县| 道真| 兴城市| 卢湾区| 泊头市| 班戈县| 陕西省| 桐柏县| 曲阜市| 建始县| 浑源县| 巴林左旗| 澜沧| 饶平县| 琼海市| 隆化县| 神木县| 色达县| 普兰店市| 任丘市| 新安县| 新营市| 楚雄市|