Подтвердить что ты не робот

Есть ли у .NET что-то похожее на журнал сбора мусора Java?

Есть ли у .NET что-то похожее на журнал сбора мусора Java? Я хочу записать GC-статистику в журнал в производственном приложении. Google не говорит мне ничего полезного, и у SO тоже нет никаких связанных вопросов.

Спасибо

4b9b3361

Ответ 1

Статистика GC доступна как счетчики производительности. В perfmon они отображаются в категории ".NET CLR Memory". Вы можете программно запускать перманентные счетчики через пространство имен System.Diagnostics(классы PerformanceCounterXxx) или использовать Server Explorer для создания удобных оберток.

Обратите внимание, что это статистические данные и не предоставляют подробное ведение журнала для каждого объекта.

Ответ 2

Когда перфорация говорит вам о наличии проблемы, вы можете погрузиться с отладчиком (windbg), чтобы найти утечки. Команда GCRoot позволяет узнать, почему память не собирается. См. этот blogpost для получения дополнительной информации

Ответ 3

Вы можете самостоятельно настроить уровень регистрации GC, используя Уведомления о сборе мусора. Но учтите, что если вы используете ConcurrentGC, что было бы типичным для серверных приложений, вы получаете только уведомления для GC-терминалов Stop-the-world. Так что это не так полно, как эквивалент Java, но это что-то.

Существует также небольшая информация, связанная с GC, доступная по протоколу ETW. Возможно, вы можете подключить своего слушателя ETW и извлечь информацию таким образом, но я не знаю, как это сделать.