2016-04-01 48 views
1

Will Garbage Collection列表的自由值,如果該列表位於擴展List的對象內部,並且該對象在清除Dictionary時位於Dictionary內。或者我必須清除每個列表?將垃圾回收處理列表的值列表

我希望這聽起來不太複雜的一個問題。我試着閱讀C#中的垃圾收集是如何工作的,它似乎說它處理所有事情(字面意思),但我想確保。 我也試着發現如果有人有同樣的問題,但我發現的問題不涉及字典。

編輯:所以,我重新閱讀垃圾收集的信息,它確實看起來它會照顧它的一切。任何人都可以證實我只是內存泄漏的偏執狂。另外我知道我可以測試內存泄漏,但爲什麼,如果有人已經有了答案。

+0

我發現的問題也沒有涉及垃圾收集。 – whackatoe

+1

垃圾收集器負責清除那些移出作用域的對象,意味着沒有對這些對象的引用。除非您發現有任何內存泄漏,否則請將其留給GC處理。 –

+1

你不需要清除它。 GC將查找並釋放在對象圖中無法遍歷的任何對象。 – LodeRunner28

回答

0

簡短的回答是是的

當您清除字典中的項目時,每個(列表)項目的引用計數將減少一個。對於其中引用計數現在爲零(不包含其他引用)的每個引用計數,該對象將有資格進行垃圾回收。在它自己被垃圾收集之後,對(列表中)每個基礎項目的引用計數將依次減少1,並且將重複相同的過程。

垃圾收集器中可能會有其他優化以處理列表中的項目作爲特例,但概念模型應與上述說明保持一致。

關於垃圾收集的正常警告仍然適用,並且更可能是內存泄漏的來源。例如,如果列表中的項目持有資源,例如打開的數據庫連接(實際上任何實現IDisposable)的任何東西,則需要確保您在放棄之前明確地調用每個項目上的「Dispose」參考資料。

+0

歡迎來到堆棧溢出,並甜蜜回答! ;) –

+0

這更好地解釋了微軟頁面本身。謝謝 – whackatoe