dotMemory — профилировщик памяти для .NET, который можно запускать прямо из Visual Studio, подключать в качестве плагина к JetBrains Rider или использовать как самостоятельный инструмент.
dotMemory позволяет вам профилировать приложения, основанные на любых поддерживаемых версиях платформ .NET Framework, .NET Core, .NET, веб-приложения ASP.NET, IIS, IIS Express, службы Windows, приложения универсальной платформы Windows, и многое другое. На macOS и Linux dotMemory можно использовать только в составе JetBrains Rider или в качестве консольного профилировщика.
dotMemory позволяет вам импортировать raw-дампы памяти Windows, полученные с помощью Диспетчера задач или Process Explorer, и анализировать их как обычные снэпшоты памяти. В ходе анализа вы можете воспользоваться различными автоматическими инспекциями, диаграммами удержания и другими передовыми возможностями dotMemory.
Понимание того, как удерживается память в вашем приложении, является критически важным для его успешной оптимизации. В этом режиме обзора в диаграмме «солнечные лучи» показывается иерархия доминаторов (объектов, эксклюзивно удерживающих другие объекты в памяти).
Один быстрый взгляд на диаграмму позволяет вам узнать, какие объекты критически важны для вашего приложения, и оценить крупнейшие структуры: чем больше памяти удерживает доминатор, тем больше центральный угол.
Чтобы получить путь удержания определенного доминатора, щелкните на соответствующую дугу. Дважды щелкните на доминаторе, чтобы приблизить диаграмму, что позволит вам более подробно разглядеть объекты, удерживаемые этим доминатором.
Интеграция dotMemory с JetBrains Rider позволяет отслеживать распределение памяти в реальном времени, анализировать, как память распределялась в выбранные промежутки времени, и выполнять другие полезные действия. Вы также можете в любой момент запустить сеанс профилирования памяти из Visual Studio.
Далее вы можете переходить от типа, указанного в наборе объектов dotMemory, к объявлению типа в Visual Studio.
Иногда снэпшоты целесообразно делать только при соблюдении какого-либо условия. Именно поэтому dotMemory позволяет автоматизировать процесс сбора снэпшотов. Это особенно полезно в случаях существенного увеличения памяти, потребляемой вашим приложением, а также тогда, когда сделать снэпшот вручную бывает достаточно затруднительно. Просто установите определенное условие, после чего при удовлетворении этого условия снэпшоты будут сделаны автоматически.
Выполняйте мониторинг памяти, потребляемой вашим приложением, делайте снэпшоты и сравнивайте их одним кликом.
Изучайте объекты кучи с разных ракурсов. Хотите понимать взаимоотношения объектов? Быть в курсе того, на какие объекты они ссылаются и с помощью каких полей? Знать, какими вызовами были созданы эти объекты? Нет проблем! В dotMemory есть обзоры на все случаи жизни.
Сравнение двух снэпшотов — основной способ находить объекты, вызывающие утечку памяти. Используйте сравнительный режим просмотра, чтобы узнать, сколько объектов было создано в промежутке между снэпшотами, а сколько объектов было утилизировано.
Несмотря на то, что профилирование памяти имеет репутацию «занятия для специалистов», уникальный интерфейс dotMemory позволяет резко снизить входной барьер и сделать профилирование памяти доступным и простым. Вы просто перемещаетесь сверху вниз, от набора объектов к их конкретным экземплярам, пока не выявите реальную причину проблем с памятью.
Чрезмерное выделение памяти и слишком частые запуски сборщика мусора могут подразумевать значительные накладные расходы при управлении памятью. Используйте режим просмотра трафика, чтобы понять, какие объекты наиболее интенсивно создавались/утилизировались в вашем приложении и какие функции создавали этот трафик памяти.
dotMemory автоматически сканирует ваш снэпшот на наличие распространенных ошибок, вызывающих проблемы с памятью, таких как дублирующиеся строки, разреженные массивы, «протекающие» обработчики событий или привязки данных WPF. Если вы не знаете, с чего начать, эти инспекции могут послужить отличной стартовой точкой для анализа снэпшота.
В комплекте с dotMemory поставляется профилировщик для командной строки: dotMemory.exe. Используйте этот инструмент для автоматизации профилирования: сделайте профилирование одним из этапов ваших сборок непрерывной интеграции или используйте его просто для ускорения процедур профилирования (например, если вам нужно регулярно профилировать одно и то же приложение, однако вы не хотите раз за разом запускать интерфейс dotMemory).
Доступна бесплатная пробная версия на 30 дней