【发布时间】:2011-02-25 10:30:07
【问题描述】:
是否可以列出存储在堆中的所有对象。 我想做这样的事情:
IEnumerable<GCHandle> listOfObjectsInHeap = GetListOfObjectsFromHeap();
【问题讨论】:
-
为什么要这样做?你想用这些信息做什么?
标签: c# .net memory memory-management heap-memory
是否可以列出存储在堆中的所有对象。 我想做这样的事情:
IEnumerable<GCHandle> listOfObjectsInHeap = GetListOfObjectsFromHeap();
【问题讨论】:
标签: c# .net memory memory-management heap-memory
我不知道有任何托管函数允许您执行此操作。您可以使用HeapWalk 函数检索此信息。 Here's an example 使用它(它会创建一个新堆,但您可以使用 GetProcessHeap 检索当前进程堆)。
【讨论】:
您可以使用Profiling API 来实现此目的。不幸的是不在托管代码中。
【讨论】:
使用 ClrMD 库,您可以连接到自己的进程并检查堆。
但是,众所周知,对正在运行的进程使用 ClrMD 会限制可用信息,因为堆可能会在您尝试遍历它时发生变化。
http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash-dump-and-live-process-inspection.aspx
【讨论】: