4

是否可以访问 .NET 应用程序中的托管堆并例如枚举当前分配的对象?

我知道有各种工具可以让你做到这一点,但我宁愿自己从代码中做到这一点,这样我就可以在自动化测试中使用它,比如在关闭表单后检查所有东西是否都已处理和清理。

4

5 回答 5

2

http://sourceforge.net/projects/profilesharp/有一个带有可用源代码的分析器。

于 2009-07-26T15:28:56.850 回答
1

您可以使用 CLR Profiler 查看此信息:

http://www.microsoft.com/downloads/details.aspx?familyid=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en

于 2009-07-26T15:17:40.510 回答
1

除了使用分析器之外,唯一的方法是使用 WinDbg 并加载 SOS 扩展。

IIRC,你叫!EEHeap。

于 2009-07-26T15:24:39.123 回答
1

探查器(使用 Profiling API)是“外部”组件(不完全是 COM),因为它们由 CLR 加载,并且在托管代码中的任何方法 enter/leave/tail 调用(以及很多其他的东西也是如此)。它们是用非托管代码编写的。

AFAIK 如果不调用监视 CLR 的分析器/调试器,就无法在内部获取此信息。还要记住,你不能总是得到这种信息,因为它只有在你的代码完成执行后才存在(许多 Dispose() 调用、终结等)。

于 2009-07-26T22:55:25.217 回答
1

现在您可以使用ClrMD Nuget 包。

Nuget 包实际上称为Microsoft.Diagnostics.Runtime. 它将允许您查看堆中的对象以及 CLR 运行时的其他属性。

于 2017-05-03T10:06:31.493 回答