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