Какие есть хорошие профилировщики .NET?

Какие профилировщики вы использовали при работе с программами .net и какие из них особенно порекомендовали бы?

Ответов (25)

Решение

Я широко использовал JetBrains dotTrace и Redgate ANTS . Они довольно похожи по характеристикам и цене. Оба они предлагают полезное профилирование производительности и довольно простое профилирование памяти.

dotTrace интегрируется с Resharper, что действительно удобно, поскольку вы можете профилировать производительность модульного теста одним щелчком мыши в среде IDE. Однако dotTrace часто дает ложные результаты (например, когда говорится, что метод занял несколько лет).

Я предпочитаю способ представления результатов профилирования в ANTS. Он показывает вам исходный код, а слева от каждой строки сообщает, сколько времени потребовалось для его запуска. dotTrace имеет только представление в виде дерева.

Профилировщик EQATEC является довольно простым и требует, чтобы вы скомпилировали специальные инструментальные версии ваших сборок, которые затем можно было запустить в профилировщике EQATEC. Однако это бесплатно.

В целом, я предпочитаю ANTS для профилирования производительности, хотя, если вы используете Resharper, интеграция dotTrace является отличной функцией и означает, что она превосходит ANTS по удобству использования.

Бесплатный Microsoft CLR Profiler ( .Net framework 2.0 / .Net Framework 4.0 ) - это все, что вам нужно для профилирования памяти .NET.

Обновление 2011 г .:

Профайлер памяти Scitech имеет довольно основной пользовательский интерфейс , но много полезной информации, включая некоторую информацию о неуправляемой памяти, dotTrace и МУРАВЬЕВ недостаток - вы могли бы найти это полезно , если вы делаете COM Interop, но я до сих пор найти профайлер , что делает COM проблемы с памятью легко диагностировать - обычно приходится вырываться windbg.exe .

Профилировщик ANTS стремительно развивался в последние несколько лет, и его профилировщик памяти имеет несколько действительно полезных функций, которые, по моей оценке, теперь опередили его как пакет dotTrace. Мне повезло, что у меня есть лицензии для обоих, но если вы собираетесь купить один профилировщик .Net как для производительности, так и для памяти, сделайте его ANTS.

ANTS Profiler . Я не пользовался многими, но особых претензий к ANTS не имею. Визуализация действительно полезна.

Don't forget nProf - a prefectly good, freeware profiler.

Недавно я обнаружил EQATEC Profiler http://www.eqatec.com/tools/profiler . Он работает с большинством версий .NET и на множестве платформ. Он прост в использовании, а его части бесплатны даже для коммерческого использования.

AutomatedQA AQTime для синхронизации и SciTech MemProfiler для памяти.

Анализатор производительности Intel® VTune ™ для быстрого отбора проб

Не забудьте об удивительном профилировщике памяти scitech .net

Он отлично подходит для отслеживания того, почему вашему приложению .net не хватает памяти.

Мы выбрали YourKit Profiler для .NET в моей компании, так как это было лучшее соотношение цены и возможностей. Для небольшой компании, которая хочет иметь гибкое лицензирование (плавающие лицензии), это был идеальный выбор - в то время ANTS был медальоном для разработчиков.

Кроме того, это дало нам возможность подключиться к запущенному процессу, что было невозможно с dotTrace. Однако помните, что присоединение - не лучший вариант, поскольку все .NET будет замедляться, но это был единственный способ профилировать приложения .NET, запускаемые другими процессами. Что касается функций, ANTS и dotTrace были лучше, но в итоге YourKit оказался достаточно хорош.

Если вы используете ASP.NET MVC, вы можете попробовать MVCMiniProfiler (http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)

Другие охватывали профилирование производительности, но что касается профилирования памяти, в настоящее время я оцениваю как Scitech .NET Memory Profiler 3.1, так и ANTS Memory Profiler 5.1 (текущие версии по состоянию на сентябрь 2009 г.). Я попробовал JetBrains один год или два назад, и он был не так хорош, как ANTS (для профилирования памяти), поэтому на этот раз я не стал беспокоиться. Читая веб-сайты, похоже, что он не имеет тех же функций профилирования памяти, что и два других.

Как ANTS, так и профилировщик памяти Scitech имеют функции, которых нет у другого, поэтому какой вариант лучше всего будет зависеть от ваших предпочтений. Вообще говоря, Scitech предоставляет более подробную информацию, в то время как ANTS действительно невероятно идентифицирует протекающий объект. В целом, я предпочитаю ANTS, потому что он очень быстро обнаруживает возможные утечки.

Вот основные плюсы и минусы каждого из моих опытов:

Общие функции ANTS и Scitech .NET Memory Profiler

  • Функция анализа в реальном времени
  • Отличные обучающие видео на их веб-сайтах
  • Легко использовать
  • Достаточно производительный (очевидно, медленнее, чем без профилировщика, но не настолько, чтобы вы разочаровались)
  • Показать экземпляры протекающих объектов
  • В основном они оба неплохо справляются со своей работой

Муравьи

  • Фильтры одним щелчком мыши для поиска распространенных утечек, в том числе: объекты, которые остаются активными только обработчиками событий, объекты, которые удаляются, но все еще остаются активными, и объекты, которые поддерживаются только по ссылке из удаленного объекта. Вероятно, это убийственная особенность ANTS - из-за этого поиск утечек происходит невероятно быстро. По моему опыту, большинство утечек вызвано тем, что обработчики событий не отключаются, и ANTS просто направляет вас прямо к этим объектам. Потрясающие.
  • График удержания объекта. Хотя та же информация доступна в Scitech, ее гораздо проще интерпретировать в ANTS.
  • Показывает размер с дочерними элементами в дополнение к размеру самого объекта (но только когда экземпляр выбран, к сожалению, не в общем списке классов).
  • Лучшая интеграция с Visual Studio (щелкните правой кнопкой мыши график, чтобы перейти к файлу)

Профилировщик памяти Scitech .NET

  • Показывает трассировку стека, когда объект был выделен. Это действительно полезно для объектов, которые размещены во множестве разных мест. С помощью ANTS трудно точно определить, где был создан просочившийся объект.
  • Показывает количество одноразовых предметов, которые не были утилизированы. Хотя это и не свидетельствует об утечке, он определяет возможности решения этой проблемы и повышения производительности вашего приложения в результате более быстрой сборки мусора.
  • Более подробные параметры фильтрации (несколько столбцов можно фильтровать независимо).
  • Предоставляет информацию об общем количестве созданных объектов (включая собранный мусор). ANTS показывает только статистику «живых» объектов. Это упрощает анализ и настройку общей производительности приложения (например, определение того, где много объектов создается без необходимости, которые не обязательно протекают).

Подводя итог, я думаю, что ANTS помогает быстрее находить утечки, в то время как Scitech предоставляет немного больше подробностей об общей производительности памяти вашего приложения и отдельных объектах, если вы знаете, на что смотреть (например, трассировку стека при создании). Если бы трассировка стека и отслеживание неудаленных одноразовых объектов были добавлены в ANTS, я бы не увидел необходимости использовать что-либо еще.

Я обнаружил множество проблем в большом приложении на C#, используя это .

Обычно проблема возникает во время запуска или завершения работы, когда подключаемые модули загружаются, а большие структуры данных создаются, уничтожаются, сериализуются или десериализуются. Часто они создаются и инициализируются более одного раза, а обработчики изменений добавляются несколько раз, что еще больше усугубляет проблему.

В подобных случаях программа может работать настолько медленно, что достаточно всего двух выборок, чтобы определить виновные сайты вызова метода / функции / свойства.

[ Полное раскрытие ]

Хотя они еще не так полнофункциональны, как некоторые другие перечисленные здесь профилировщики памяти .NET, на рынке появилась новая запись под названием JustTrace . Он создан Telerik, и его основная цель - упростить и ускорить отслеживание / профилирование для всех типов приложений (веб / Silverlight / настольный компьютер).

Если вы когда-либо находили профилирование и оптимизацию пугающими или медленными с другими инструментами, то стоит взглянуть на JustTrace .

Я работал с JetBrains dotTrace для WinForms и консольных приложений (еще не тестировался на ASP.net), и он работает довольно хорошо:

They recently also added a "Personal License" that is significantly cheaper than the corporate one. Still, if anyone else knows some cheaper or even free ones, I'd like to hear as well :-)

Раньше я работал с профайлером RedGate. Сделал работу за меня.

Раньше я использовал профилировщик, поставляемый с Visual Studio Team System .

Я сомневаюсь, что профилировщик, поставляемый с Visual Studio Team System, является лучшим профилировщиком, но во многих случаях я находил его достаточно хорошим. Что конкретно вам нужно помимо того, что предлагает VS?

РЕДАКТИРОВАТЬ: К сожалению, он доступен только в VS Team System, но если у вас есть доступ к нему, стоит проверить.

AQTime разумен, но требует некоторого обучения и не так прост в использовании, как встроенный в Team Suite.

Сам не пробовал, но, может быть, dotTrace ? Их приложение ReSharper, безусловно, хорошее. Может быть, dotTrace тоже :)

Я обнаружил, что dotTrace Profiler от JetBrains является отличным инструментом профилирования для .NET, а их режим ASP.NET - это качество.

Я бы добавил, что способность dotTrace различать сеансы трассировки памяти и производительности абсолютно неоценима (ANTS также может иметь функцию сравнения памяти, но я не видел разницы в производительности).

Возможность запускать сеанс профилирования до и после исправления ошибки или улучшения, а затем сравнивать результаты невероятно ценно, особенно с гигантским устаревшим .NET-приложением (как в моем случае), где производительность никогда не была приоритетом и где можно было найти узкие места. ОЧЕНЬ утомительно. Выполнение различий до и после позволяет увидеть изменение количества вызовов для каждого метода и изменение продолжительности для каждого метода .

Это полезно не только при изменении кода, но и в том случае, если у вас есть приложение, которое использует другую базу данных, скажем, для каждого клиента / покупателя. Если один из клиентов жалуется на медлительность, вы можете запустить сеанс профилирования с использованием его базы данных и сравнить результаты с «быстрой» базой данных, чтобы определить, какие операции приводят к замедлению. Конечно, есть много инструментов для оценки производительности на стороне базы данных, но иногда я действительно помогаю увидеть метрики производительности со стороны приложения (поскольку это ближе к тому, что на самом деле видит пользователь).

Итог: dotTrace отлично работает, и разница неоценима.

Последняя версия профилировщика памяти ANTS (думаю, 5) просто качает !!! У меня была утечка, использующая WinDbg и SOS, так как раньше это оказалось лучшим способом, затем я попробовал ANTS и получил это за считанные минуты. Действительно замечательная программа.

Текущая версия SharpDevelop (3.1.1) имеет хороший интегрированный профилировщик. Это довольно быстро и очень хорошо интегрируется в среду разработки SharpDevelop и ее средство запуска NUnit. Результаты отображаются в гибком стиле «дерево / список» (используйте LINQ для создания собственного выбора). Двойной щелчок по отображаемому методу позволяет перейти непосредственно к исходному коду.

Я хотел бы добавить профилировщик yourkit java и .net, я люблю его для Java, но не пробовал версию .NET.

Если вы ищете что-то быстрое, легкое и бесплатное, http://code.google.com/p/slimtune/, похоже, отлично подойдет.

Профайлер NuMega True Time существует в DevPartner Studio от Micro Focus. Он предоставляет подробную информацию на уровне строк и методов для приложений .NET, которым требуются только PDB, источник не требуется (но это помогает). Он может различать алгоритмически тяжелые подпрограммы и подпрограммы с длительным ожиданием ввода-вывода, используя наш проприетарный драйвер синхронизации режима ядра для каждого потока. Версия 10.5 поставляется с новой поддержкой 64-процессов 4 февраля 2011 года. Бесстыдный плагин: я работаю над линейкой продуктов DevPartner. Следите за новостями о запуске 10.5 на http://www.DevPartner.com .

Отказ от ответственности: я являюсь менеджером по продукту DevPartner в Micro Focus.