можно ли перечислить все объекты, хранящиеся в куче. Я хотел бы сделать что-то вроде этого:
IEnumerable<GCHandle> listOfObjectsInHeap = GetListOfObjectsFromHeap();
Используя библиотеку ClrMD, вы можете подключиться к собственному процессу и проверить кучу.
Однако использование ClrMD против запущенного процесса, как известно, ограничивает доступную информацию, поскольку куча может меняться при попытке ее пройти.
http://blogs.msdn.com/b/dotnet/archive/2013/05/01/net-crash-dump-and-live-process-inspection.aspx
Вы можете использовать Profiling API для достижения этой цели. К сожалению, не в управляемом коде.
Мне неизвестна какая-либо управляемая функция, которая позволяет вам это делать. Вы можете получить эту информацию, используя функцию HeapWalk . Вот пример его использования (он создает новую кучу, но вы можете извлечь кучу текущего процесса с помощью GetProcessHeap ).