Как перечислить все управляемые объекты в куче в .Net? - PullRequest
11 голосов
/ 29 мая 2010

можно ли перечислить все объекты, хранящиеся в куче. Я хотел бы сделать что-то вроде этого:

IEnumerable<GCHandle> listOfObjectsInHeap = GetListOfObjectsFromHeap();

Ответы [ 3 ]

5 голосов
/ 13 февраля 2014

Используя библиотеку ClrMD, вы можете подключиться к собственному процессу и проверить кучу.

Однако использование ClrMD против запущенного процесса, как известно, ограничивает доступную информацию, поскольку куча может меняться при попытке ее пройти.

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

4 голосов
/ 29 мая 2010

Вы можете использовать Profiling API для достижения этой цели. К сожалению, не в управляемом коде.

2 голосов
/ 29 мая 2010

Мне неизвестна какая-либо управляемая функция, которая позволяет вам это делать. Вы можете получить эту информацию, используя функцию HeapWalk . Вот пример его использования (он создает новую кучу, но вы можете извлечь кучу текущего процесса с помощью GetProcessHeap ).

...