Возможно ли перебрать кучу GC? - PullRequest
5 голосов
/ 22 сентября 2009

Я не уверен, что следующие вопросы верны. Для самообразования я просто задаю вопрос.

(1) Можно ли программно выполнять итерацию кучи GC всех поколений?

(2) Можно ли посмотреть, как ГХ работает на моей сборке, запустив поток?

Ответы [ 2 ]

7 голосов
/ 22 сентября 2009

Ответы на ваши вопросы:

  1. К сожалению, нет, вы не можете. Сборщик мусора в CLR работает в виде метки, развертки, компактности, поэтому между запусками нет информации о куче (кроме размера кучи или текущего поколения экземпляра определенного типа), которая позволила бы вам выполнять итерацию всех объектов в это.

  2. Лучший способ контролировать ГХ - использовать perfmon и просматривать (или регистрировать) счетчики памяти CLR .

2 голосов
/ 23 сентября 2009

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

Если вам просто нужно посмотреть эту информацию в целях отладки, вы можете запустить WinDbg и загрузить расширение SOS. чем вы можете использовать команду расширения! dumpheap, чтобы увидеть, какие именно объекты находятся в куче GC. Вы также можете использовать режим профилирования памяти dotTrace, если он у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...