c# – 在运行时查找对象的引用

我有一个永远存在的对象.我删除了我可以看到的所有引用,使用它之后,它仍然没有收集.它的生命周期是非常复杂的,所以我不能确定所有的引用被清除.

if ( container.Controls.Count > 0 )
{ 
    var controls = new Control[ container.Controls.Count ];
    container.Controls.CopyTo( controls, 0 );

    foreach ( var control in controls ) 
    { 
         container.Controls.Remove( control );
         control.Dispose();
    }

    controls = null; 
}

GC.Collect();
GC.Collect(1);
GC.Collect(2);
GC.Collect(3);

我如何找出它仍然有什么参考?为什么不收集?

尝试使用内存分析器(例如ants),它会告诉您什么是保持对象活着.试图第二次猜测这种类型的问题是非常困难的.

Red Gate门将进行14天试用,应该足够多的时间来解决这个问题,并决定内存分析器是否为您提供长期价值.

市场上还有很多其他内存分析器(例如.NET Memory Profiler),其中大多数都有免费试用版,但是我发现Red-Gate工具易于使用,所以先尝试一下.

翻译自:https://stackoverflow.com/questions/1471927/find-references-to-the-object-in-runtime

转载注明原文:c# – 在运行时查找对象的引用