Какой профилировщик памяти сообщит мне, что собирается в каждом поколении?

#c# #.net #memory

#c# #.net #память

Вопрос:

Недавно мне стало любопытно, какие именно объекты собираются в каком поколении. Прошло некоторое время с тех пор, как я в последний раз использовал профилировщик, которым, я думаю, был SciTech. Я не помню, чтобы он показывал разбивку коллекций, отсортированных по номеру поколения, но я могу ошибаться.

Прежде чем я пойду и установлю целую кучу профилировщиков, у кого-нибудь есть рекомендации?

Ответ №1:

JetBrains dotTrace одинаково хорош, как и ANTS. На всякий случай, если вы хотели иметь больше выбора.

Ответ №2:

Вы можете использовать WinDbg. Существует расширение под названием SOSex (SOSEX), которое расширяет основные команды, предоставляемые стандартом SOS.DLL расширение отладчика.

В частности, у него есть команда, !dumpgen, которая сбрасывает содержимое указанного поколения.

Кроме того, с помощью SOS !FindRoots вы можете установить точку останова, когда GC собирается собирать поколение.

Ответ №3:

ANTS Performance Profiler 6.2 Профилировщик .NET-кода: ускоряет производительность вашего.СЕТЕВЫЕ приложения

Комментарии:

1. И вы уверены, что я могу посмотреть Gen2 и получить список объектов?

Ответ №4:

Я использую ANTS — он состоит из 2 отдельных профилировщиков, одного для производительности и одного для памяти. Вам нужно было бы использовать ANTS Memory Profiler для просмотра коллекции объектов. Это определенно позволяет вам исследовать разные поколения по отдельности.