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

Kir*_*ill 11 .net c# memory heap memory-management

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

IEnumerable<GCHandle> listOfObjectsInHeap = GetListOfObjectsFromHeap();
Run Code Online (Sandbox Code Playgroud)

Jul*_*ain 5

您可以使用Profiling API来实现这一点。不幸的是不在托管代码中。


Jas*_*ome 5

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

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

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