我有三个对象A,B和C。C是A和B的子对象。C引用了A和B。A和B引用了C。
我了解到,当删除A和B对C的引用时,C变成垃圾,将被GC收集。


我的理解正确吗?
是否应将C中对A和B的引用设置为NULL?
如果是,好处是什么?


public class A { public C Cr { get; set; } }public class B { public C Cr { get; set; } }public class C{ public A Ar { get; set; } public B Br { get; set; }}class Program{ static void Main(string[] args) { var oa = new A(); var ob = new B(); var oc = new C(); oc.Ar = oa; oc.Br = ob; oa.Cr = oc; ob.Cr = oc; // Some operation oa.Cr = null; ob.Cr = null; //is the following code required? // if yes, what is the benefit? oc.Ar = null; oc.Br = null; }


谢谢

内存

最佳答案

如果没有对C的实时引用,那么它就有资格进行垃圾回收。这并不意味着会立即将其收集为垃圾。

如果该对象即将成为垃圾收集对象,则无需将引用设置为null。

请注意,如果没有对A,B或C的“根”引用,则即使它们继续相互引用,它们也都可以进行垃圾回收。

关于c# - 垃圾收集,.NET,C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5647379/

10-10 19:28