繁体   English   中英

垃圾收集,.NET,C#

[英]Garbage Collection, .NET, C#

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

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

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的“根”引用,则即使它们继续相互引用,它们也可以进行垃圾回收。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM