共用方式為


弱參考

垃圾收集行程無法收集應用程式使用中的物件,而應用程式的程式代碼可以到達該物件。 應用程式據稱具有對物件的強參考。

弱式參考允許垃圾回收程序收集物件,同時仍允許應用程式存取物件。 弱式參考只有在沒有強式參考存在時,物件在被回收前不確定的時間內才是有效的。 當您使用弱式參考時,應用程式仍然可以取得對象的強式參考,以防止收集它。 不過,存在著垃圾回收器可能在重新建立強式參考之前先到達物件的風險。

弱式參考對需要大量記憶體的物件很有用,但如果被垃圾收集器回收,則這些物件可以容易地重新建立。

假設 Windows Forms 應用程式中的樹視圖向使用者顯示複雜的階層式選項選擇。 如果基礎數據很大,當使用者與應用程式中的其他項目相關時,將樹狀結構保留在記憶體中是沒有效率的。

當使用者切換至應用程式的另一個部分時,您可以使用 WeakReference 類別來建立樹狀結構的弱式參考,並終結所有強式參考。 當使用者切換回樹狀結構時,應用程式會嘗試取得樹狀結構的強式參考,如果成功,則會避免重新建構樹狀結構。

若要使用 物件建立弱式參考,您可以使用要追蹤的物件實例來建立 WeakReference 。 如需程式代碼範例,請參閱 WeakReference 類別庫中的 。

短期與長期弱引用

您可以建立短弱引用或長弱引用:

  • 當物件被垃圾回收機制回收時,短弱引用的目標會變成 null。 弱式參考本身是受管理物件,而且會受到垃圾回收,就像任何其他受管理對象一樣。 短弱引用是 WeakReference 的無參數建構函式。

  • 呼叫 物件的 Finalize 方法之後,會保留長時間的弱式參考。 這可讓物件重新建立,但物件的狀態仍無法預測。 若要使用長參照,請在true構函式中指定WeakReference

    如果對象的類型沒有 Finalize 方法,則會套用簡短的弱式參考功能,而且弱式參考只有在收集目標之前才有效,這樣在執行完成項之後,隨時都可能發生。

若要建立強式參考並再次使用物件,請將 Target 的屬性轉換為物件的 WeakReference 型別。 如果Target屬性返回null,則該物件已被收集;否則,您可以繼續使用該物件,因為應用程式已經重新取得其強式參考。

使用弱式參考的指導方針

只有在必要的時候,才使用長弱式參考,因為對象狀態在完成之後無法預測。

避免對小型物件使用弱式參考,因為指標本身可能很大或更大。

避免使用弱式參考作為記憶體管理問題的自動解決方案。 相反地,請制定效能良好的快取策略,以便處理應用程式中的物件。

另請參閱