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


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

IEnumerable<GCHandle> listOfObjectsInHeap = GetListOfObjectsFromHeap();

7346
2018-05-29 08:49


起源

你为什么要这样做?你想用这些信息做什么? - luke


答案:


你可以使用 分析API 为了达成这个。不幸的是不在托管代码中。


4
2018-05-29 09:00





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

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

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


5
2018-02-12 20:10



这是最好的方法。 - Alois Kraus


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


2
2018-05-29 08:56