C#垃圾收集器交叉引用

问题描述:

交叉引用对象/类的垃圾收集器可用资源,不再从主程序引用。 例如 -C#垃圾收集器交叉引用

class class1 
{ 
    class2 m_RefClass2; 
} 
class class2 
{ 
    class1 m_RefClass1; 
} 

class class3 
{ 
    public class3() 
    { 
     class1 obj1 = new class1(); 
     class2 obj2 = new class2(); 
     obj1.m_RefClass2 = obj2; 
     obj2.m_RefClass1 = obj1; 
    } 
} 
+1

它被称为“循环参考”,谷歌好。第一击:http://*.com/questions/400706/circular-references-cause-memory-leak – 2010-05-05 18:40:27

是的。 .NET垃圾收集器不仅仅是对引用进行计数(在这种情况下,这种安排会导致两个类彼此保持联系)。任何不“根”的对象(意味着没有从GC根对象到对象的引用路径)符合收集条件。

+0

打我16秒 – 2010-05-05 17:50:36

+1

如果我有一个镍每次我听说过! – 2010-05-05 17:51:08

+0

THNX!还有一件事 - GC何时决定释放这些资源?它是否会出现突变或罕见(如关闭程序时) – 2010-05-05 18:54:08