我有一個類,它有一個static List<T>
字段,裏面放着我所有的物品;每個對象代表一個正在運行的進程及其屬性。我應該從我的列表中刪除後,我的對象更改爲空?
該過程完成其作業後,將從List<T>
中刪除相關對象,然後更新我的UI。
將對象從我的列表中刪除後,是否應該將此對象更改爲null
以釋放資源?
我有一個類,它有一個static List<T>
字段,裏面放着我所有的物品;每個對象代表一個正在運行的進程及其屬性。我應該從我的列表中刪除後,我的對象更改爲空?
該過程完成其作業後,將從List<T>
中刪除相關對象,然後更新我的UI。
將對象從我的列表中刪除後,是否應該將此對象更改爲null
以釋放資源?
一旦你從列表中刪除的對象,該對象仍然存在,但如果沒有提及被該對象進行,垃圾回收器將清理它,你將不必擔心
那麼取消訂閱這個對象事件呢?它也由垃圾收集器處理,由於沒有參考正在制定? – user2813889
@ user2813889訂閱Broadcaster的事件並不會阻止Broadcaster的垃圾收集。如果Broadcaster超出範圍,它將被gc – Anirudha
C#被垃圾收集,無論如何內存將被照顧。
總之,沒有。
一旦引用超出了範圍,Garbage Collector將拋棄對象/引用。這也可以通過using(如果對象實現IDisposable
)關鍵字來處理。基本上,不要將它設置爲null
,並讓C#中的清理機制爲您處理工作。
您從列表中刪除該對象的時刻,對象將走出去的範圍,這將有資格GC ..
在活動方面:
即使是對象有一些其他對象訂閱的事件,但對於GC仍然是可以接受的。
所以,它的單向關係
Broadcaster -> Subscribers
如果Broadcaster
超出範圍,將有資格,即使有用戶GC ..
但Broadcaster
會妨礙Subscribers
GC看一看Do event handlers stop garbage collection from occuring?
什麼你一定要做的是添加代碼去與描述。但是要回答這個問題:如果對象引用無論如何都會超出範圍,那麼沒有理由將其設置爲「null」。 – Jon
它的種類取決於「將此對象更改爲空」的含義。這可以被解釋爲彼此非常不同的多種方式。 – hatchet