C# 垃圾收集-期待什么?

C# 垃圾收集-期待什么?,c#,garbage-collection,C#,Garbage Collection,我有两个lists,其中两个都包含相同类型的对象。让我们称之为TypeX 当我想添加TypeX的新对象时,我会创建一个TypeX的新对象,然后使用add到list1和list2。因此,每个列表都将引用实际对象。 (我希望我就在这里) 然后,我想移除这个对象。对于这两个列表s,我都会使用Remove。因此,对对象的引用已被删除 但是对象本身会发生什么呢?总承包商会清理它吗?我是否应该以其他方式删除它?简单的回答是肯定的,GC将清理它。但是,如果您希望提高效率,我会将接口IDisposable添加到

我有两个
list
s,其中两个都包含相同类型的对象。让我们称之为
TypeX

当我想添加
TypeX
的新对象时,我会创建一个
TypeX
的新对象,然后使用
add
list1
list2
。因此,每个列表都将引用实际对象。 (我希望我就在这里)

然后,我想移除这个对象。对于这两个
列表
s,我都会使用
Remove
。因此,对对象的引用已被删除


但是对象本身会发生什么呢?总承包商会清理它吗?我是否应该以其他方式删除它?

简单的回答是肯定的,GC将清理它。但是,如果您希望提高效率,我会将接口IDisposable添加到您的对象中,以便GC在所有对该对象的引用消失后立即干净地处理该对象


简短的回答是肯定的,GC将清理它。但是,如果您希望提高效率,我会将接口IDisposable添加到您的对象中,以便GC在所有对该对象的引用消失后立即干净地处理该对象


简单地说,GC收集所有未被任何其他对象引用的对象


因此,如果您将对象从两个列表中删除,并且不将其保存到其他任何位置,则最终将对其进行垃圾收集。

简单地说,GC将收集所有未被任何其他对象引用的对象


所以,如果您将对象从两个列表中删除,而不将其保存在其他任何位置,则最终将被垃圾收集。

只要对象的唯一引用在这些列表中,GC将在您从两个列表中删除对象后将其删除。

只要对象的唯一引用在这些列表中,GC将在您删除后将其删除将其从两个列表中删除。

如果不再引用该对象,GC将在必要时收集该对象。这通常发生在内存压力增加时,或者通过手动给它一个运行的“提示”(您通常不需要这个)


此链接可能会有所帮助:

如果不再引用该对象,GC将在必要时收集该对象。这通常发生在内存压力增加时,或者通过手动给它一个运行的“提示”(您通常不需要这个)


此链接可能会有所帮助:

拥有GC的好处是你真的不需要担心你现在担心的事情。

拥有GC的好处是你真的不需要担心你现在担心的事情。

IDisposable
与垃圾收集器无关。IDisposable接口应仅在对象使用非托管资源(处理程序、流等)时实现,并且在将对象设置为null(以允许GC删除它)之前应注意重新设置这些资源。GC集合仅删除不再可访问的对象(存在对它的任何引用)如果您希望改进GC收集并在对象上拥有资源,那么使用IDisposable将允许您避免最终化队列:如果没有非托管的resourced
IDisposable
与垃圾收集器无关,则无需实现dipose或finalize方法。IDisposable接口应为仅当对象使用非托管资源(处理程序、流等)时才实现,并且在将对象设置为null(以允许GC删除它)之前,它应该关心重新分配这些资源。GC集合仅删除不再可访问的对象(存在对它的任何引用)如果您希望改进GC收集并在对象上拥有资源,那么使用IDisposable将允许您避免最终化队列:如果没有非托管资源,则无需实现dipose或finalize方法。不要忘记,如果任何其他对象注册了此对象上的事件,它仍将被引用!不要忘记,如果任何其他对象注册了此对象上的事件,它仍将被引用!