是否可以访问 .NET 应用程序中的托管堆并例如枚举当前分配的对象?
我知道有各种工具可以让你做到这一点,但我宁愿自己从代码中做到这一点,这样我就可以在自动化测试中使用它,比如在关闭表单后检查所有东西是否都已处理和清理。
是否可以访问 .NET 应用程序中的托管堆并例如枚举当前分配的对象?
我知道有各种工具可以让你做到这一点,但我宁愿自己从代码中做到这一点,这样我就可以在自动化测试中使用它,比如在关闭表单后检查所有东西是否都已处理和清理。
http://sourceforge.net/projects/profilesharp/有一个带有可用源代码的分析器。
您可以使用 CLR Profiler 查看此信息:
除了使用分析器之外,唯一的方法是使用 WinDbg 并加载 SOS 扩展。
IIRC,你叫!EEHeap。
探查器(使用 Profiling API)是“外部”组件(不完全是 COM),因为它们由 CLR 加载,并且在托管代码中的任何方法 enter/leave/tail 调用(以及很多其他的东西也是如此)。它们是用非托管代码编写的。
AFAIK 如果不调用监视 CLR 的分析器/调试器,就无法在内部获取此信息。还要记住,你不能总是得到这种信息,因为它只有在你的代码完成执行后才存在(许多 Dispose() 调用、终结等)。
现在您可以使用ClrMD Nuget 包。
Nuget 包实际上称为Microsoft.Diagnostics.Runtime
. 它将允许您查看堆中的对象以及 CLR 运行时的其他属性。