如何在.Net中列出堆中的所有托管对象?
是否可以列出存储在堆中的所有对象。 我想做这样的事情:
IEnumerable listOfObjectsInHeap = GetListOfObjectsFromHeap();
您可以使用Profiling API来实现此目的。 不幸的是不在托管代码中。
使用ClrMD库,您可以连接到您自己的进程并检查堆。
但是,已知使用ClrMD对正在运行的进程进行限制可用信息,因为当您尝试遍历堆时,堆可能会发生变化。
http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash-dump-and-live-process-inspection.aspx
我不知道任何允许您执行此操作的托管function。 您可以使用HeapWalk函数检索此信息。 以下是使用它的示例 (它创建了一个新堆,但您可以使用GetProcessHeap检索当前进程堆)。