2013-10-04 33 views
3

我有一個類,它有一個static List<T>字段,裏面放着我所有的物品;每個對象代表一個正在運行的進程及其屬性。我應該從我的列表中刪除後,我的對象更改爲空?

該過程完成其作業後,將從List<T>中刪除相關對象,然後更新我的UI。

將對象從我的列表中刪除後,是否應該將此對象更改爲null以釋放資源?

+2

什麼你一定要做的是添加代碼去與描述。但是要回答這個問題:如果對象引用無論如何都會超出範圍,那麼沒有理由將其設置爲「null」。 – Jon

+1

它的種類取決於「將此對象更改爲空」的含義。這可以被解釋爲彼此非常不同的多種方式。 – hatchet

回答

10

一旦你從列表中刪除的對象,該對象仍然存在,但如果沒有提及被該對象進行,垃圾回收器將清理它,你將不必擔心

+1

那麼取消訂閱這個對象事件呢?它也由垃圾收集器處理,由於沒有參考正在制定? – user2813889

+0

@ user2813889訂閱Broadcaster的事件並不會阻止Broadcaster的垃圾收集。如果Broadcaster超出範圍,它將被gc – Anirudha

8

C#被垃圾收集,無論如何內存將被照顧。

3

總之,沒有。

一旦引用超出了範圍,Garbage Collector將拋棄對象/引用。這也可以通過using(如果對象實現IDisposable)關鍵字來處理。基本上,不要將它設置爲null,並讓C#中的清理機制爲您處理工作。

+2

收集'這也可以使用using關鍵字來處理.'只有在該對象實現了'IDisposable',如果是,那麼必須手動調用'Dispose','使用'語句可能不會被使用,因爲該對象停留在列表中。 – Habib

+0

@Habib - 編輯。感謝您的反饋。 – Brian

5

您從列表中刪除該對象的時刻,對象將走出去的範圍,這將有資格GC ..


活動方面:

即使是對象有一些其他對象訂閱的事件,但對於GC仍然是可以接受的。

所以,它的單向關係

Broadcaster -> Subscribers 

如果Broadcaster超出範圍,將有資格,即使有用戶GC ..

Broadcaster會妨礙Subscribers

GC看一看Do event handlers stop garbage collection from occuring?

相關問題