如何在.Net中列出堆中的所有托管对象?

时间:2010-05-29 08:49:02

标签: c# .net memory memory-management heap

是否可以列出存储在堆中的所有对象。 我想做这样的事情:

IEnumerable<GCHandle> listOfObjectsInHeap = GetListOfObjectsFromHeap();

3 个答案:

答案 0 :(得分:5)

使用ClrMD库,您可以连接到您自己的进程并检查堆。

但是,已知对正在运行的进程使用ClrMD会限制可用的信息,因为当您尝试遍历堆时,堆可能会发生变化。

http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash-dump-and-live-process-inspection.aspx

答案 1 :(得分:4)

您可以使用Profiling API来实现此目的。不幸的是,不在托管代码中。

答案 2 :(得分:2)

我不知道任何允许您执行此操作的托管功能。您可以使用HeapWalk功能检索此信息。 Here's an example使用它(它创建一个新堆但你可以使用GetProcessHeap检索当前进程堆)。