C#循环引用垃圾收集

时间:2013-06-25 00:02:52

标签: c# garbage-collection

考虑C#中的以下类:

class A
{
    public B b;
}

class B
{
    public A a;
}

随后:

{
    A a = new A();
    B b = new B();
    a.b = b;
    b.a = a;
}

问题: 如果执行超出了这个范围,那么任何一个实例都会被垃圾收集,因为它们仍然存在对每个实例的引用,由另一个持有吗?

2 个答案:

答案 0 :(得分:4)

是的,他们俩都会。 GC遍历依赖关系树,看到程序的任何其他部分都无法访问它们,并且会正确处理它们。

这是一篇很好的MSFT文章:http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

答案 1 :(得分:1)

是的,他们将被垃圾收集。 Circular References Cause Memory Leak?