我有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