我有一个对象,它永远存在。我正在删除我能看到的所有引用,在使用它之后,但它仍然没有被收集。它的生命周期非常复杂,所以我不能确定所有引用都已清除。
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 天的试用期,应该有足够的时间来解决这个问题并决定内存分析器是否能为您提供长期值(value)。
市场上有很多其他内存分析器(例如.NET Memory Profiler),其中大部分都有免费试用,但我发现Red-Gate工具易于使用,因此请先试用。
关于c# - 在运行时查找对对象的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1471927/