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

标签 c# .net garbage-collection

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

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/

相关文章:

c# - 在 VSTO 中配置 log4net

c# - 如何为 Xamarin.Android 设置 Visual Studio?

java - 如果我有一个 Java 树,并将根设置为 NULL,所有节点都会被垃圾收集吗?

c# - 为我所有的表单设置相同的图标

c# - 如何在 C# 中清空/刷新 Windows READ 磁盘缓存?

c# - 为什么 .NET 在物理量 >95% 时不将未使用的内存释放回操作系统?

objective-c - 在 objective-c 中同时使用垃圾收集器和 ARC

c# Windows 服务是否(可能)使用 app.config

c# - 在内存中保存大量文本数据的正确策略是什么? System.Runtime.Caching 或自定义类?

.net - Entity Framework 迁移: PrimaryKey