我有2 list
s,其中都保存相同類型的對象。我們稱之爲TypeX
。垃圾回收 - 期待什麼?
當我想補充的TypeX
新對象我想創建的TypeX
一個新的對象,然後使用Add
來list1
和list2
。因此每個列表都會有一個對實際對象的引用。 (我希望我就在這裏)。
然後,我想要刪除該對象。我爲list
s使用Remove
。因此,該對象的引用已被刪除...
但是對象本身會發生什麼? GC會清潔它嗎?我應該刪除它以某種方式嗎?
我有2 list
s,其中都保存相同類型的對象。我們稱之爲TypeX
。垃圾回收 - 期待什麼?
當我想補充的TypeX
新對象我想創建的TypeX
一個新的對象,然後使用Add
來list1
和list2
。因此每個列表都會有一個對實際對象的引用。 (我希望我就在這裏)。
然後,我想要刪除該對象。我爲list
s使用Remove
。因此,該對象的引用已被刪除...
但是對象本身會發生什麼? GC會清潔它嗎?我應該刪除它以某種方式嗎?
簡單來說,在GC收集未通過任何其他對象引用的每個對象。
所以,如果你從兩個列表中刪除你的對象,並不保存在其他任何地方,它最終將被垃圾收集。
簡短的回答是肯定的,GC會清理它。但是,如果您希望使這種效率更高,我會將接口IDisposable添加到對象中,以便GC在所有引用都去除後儘快處理該對象。
http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
只要該對象的唯一引用在這些列表中,GC就會在您將它從兩個列表中刪除後將其刪除。
如果沒有更多的對象引用,GC會在需要時收集對象。這通常發生在內存壓力增加或手動給予「提示」運行時(通常不需要此操作)。
此鏈接可能會有所幫助:http://msdn.microsoft.com/en-us/library/ms973837.aspx
大約有GC的好處是,你真的不必擔心您需要的資料,現在令人擔憂。
`IDisposable`與垃圾回收器無關。 – 2011-12-15 11:09:54
只有在對象使用非託管資源(處理程序,流等)時,才應該實現IDisposable接口,並且在對象設置爲null(允許GC刪除它)之前,它必須關心將這些資源放大.CG集合只會刪除不再可到達的對象(有任何對它的引用) – 2011-12-15 11:18:51