Каковы некоторые хорошие профилировщики.NET?
Какие профилировщики вы использовали при работе с программами.net, и что бы вы особенно порекомендовали?
30 ответов
Я широко использовал JetBrains dotTrace и Redgate ANTS. Они довольно похожи по характеристикам и цене. Они оба предлагают полезное профилирование производительности и довольно простое профилирование памяти.
dotTrace интегрируется с Resharper, что очень удобно, поскольку вы можете профилировать производительность модульного теста одним щелчком мыши из IDE. Однако часто кажется, что dotTrace дает ложные результаты (например, говоря, что метод занял несколько лет)
Я предпочитаю, чтобы ANTS представлял результаты профилирования. Он показывает вам исходный код и слева от каждой строки указывает, сколько времени потребовалось для запуска. dotTrace просто имеет вид дерева.
Профилировщик EQATEC довольно прост и требует от вас компилирования специальных инструментальных версий ваших сборок, которые затем можно запустить в профилировщике EQATEC. Это, однако, бесплатно.
В целом, я предпочитаю ANTS для профилирования производительности, хотя, если вы используете Resharper, то интеграция dotTrace является убийственной функцией и означает, что она превосходит ANTS в удобстве использования.
Бесплатный профилировщик Microsoft CLR ( .Net Framework 2.0 / .Net Framework 4.0) - это все, что вам нужно для профилирования памяти.NET.
Обновление 2011:
Профилировщик памяти Scitech имеет довольно простой пользовательский интерфейс, но много полезной информации, включая некоторую информацию о неуправляемой памяти, которой нет у dotTrace и ANTS - вам может пригодиться это, если вы выполняете COM-взаимодействие, но мне еще не удалось найти какой-либо профилировщик, который делает COM проблемы с памятью, которые легко диагностировать - обычно приходится windbg.exe
,
Профилировщик ANTS за последние несколько лет начал стремительно развиваться, и его профилировщик памяти имеет некоторые действительно полезные функции, которые теперь, по моему мнению, выдвинули его впереди dotTrace как пакета. Мне повезло, что у меня есть лицензии для обоих, но если вы собираетесь купить один.Net-профилировщик для производительности и памяти, сделайте его ANTS.
Другие рассматривали профилирование производительности, но что касается профилирования памяти, в настоящее время я оцениваю 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 Memory Profiler
- Показывает трассировку стека, когда объект был выделен. Это действительно полезно для объектов, которые расположены в разных местах. С помощью ANTS трудно точно определить, где был создан протекший объект.
- Показывает количество одноразовых предметов, которые не были утилизированы. Хотя это и не указывает на утечку, оно идентифицирует возможности для исправления этой проблемы и повышения производительности вашего приложения в результате более быстрого сбора мусора.
- Более подробные параметры фильтрации (несколько столбцов могут быть отфильтрованы независимо).
- Представляет информацию о всех созданных объектах (включая мусор). ANTS показывает только "живую" статистику объекта. Это облегчает анализ и настройку общей производительности приложения (например, определить, где много ненужных объектов, которые не обязательно протекают).
Вкратце, я думаю, что ANTS поможет вам быстрее найти утечку, в то время как Scitech предоставляет немного больше информации об общей производительности памяти вашего приложения и отдельных объектах, когда вы знаете, на что обращать внимание (например, отслеживание стека при создании). Если бы в ANTS была добавлена трассировка стека и отслеживание неразмещенных одноразовых объектов, я бы не увидел необходимости использовать что-либо еще.
Недавно я обнаружил EQATEC Profiler http://www.eqatec.com/tools/profiler. Он работает с большинством версий.NET и на множестве платформ. Он прост в использовании, а его части бесплатны даже для коммерческого использования.
[ Todd]
Хотя он еще не настолько полнофункциональный, как некоторые другие профилировщики памяти.NET, перечисленные здесь, на рынке появилась новая запись под названием JustTrace. Он сделан Telerik, и его основная цель - сделать трассировку / профилирование проще и быстрее для всех типов приложений (веб /Silverlight/ рабочий стол).
Если вы когда-либо находили профилирование и оптимизацию пугающими или медленными с другими инструментами, тогда стоит взглянуть на JustTrace.
Я считаю, что dotTrace Profiler от JetBrains является отличным инструментом профилирования для.NET, и их режим ASP.NET - это качество.
ANTS Profiler. Я не использовал много, но на самом деле у меня нет претензий к ANTS. Визуализация действительно полезна.
Если вы ищете что-то быстрое, простое и бесплатное, http://code.google.com/p/slimtune/ похоже, отлично справится с этой задачей.
AutomatedQA AQTime для синхронизации и SciTech MemProfiler для памяти.
Я работал с JetBrains dotTrace для WinForms и консольных приложений (еще не тестировался на ASP.net), и он работает довольно хорошо:
Недавно они также добавили "Персональную лицензию", которая значительно дешевле корпоративной. Тем не менее, если кто-то еще знает более дешевые или даже бесплатные, я бы тоже хотел услышать:-)
Не забывайте, удивительный scitech .net профилировщик памяти
Он отлично подходит для отслеживания того, почему вашему приложению.net не хватает памяти.
Я бы добавил, что способность dotTrace различать сессии памяти и трассировки производительности абсолютно неоценима (ANTS также может иметь функцию различий в памяти, но я не видел различий в производительности).
Возможность запустить сеанс профилирования до и после исправления или улучшения ошибки, а затем сравнить результаты невероятно ценно, особенно с гигантским унаследованным приложением.NET (как в моем случае), где производительность никогда не была приоритетом и где можно было бы найти узкие места. ОЧЕНЬ утомительно. Выполнение сравнения до и после позволяет увидеть изменение количества вызовов для каждого метода и изменение продолжительности для каждого метода.
Это полезно не только во время изменения кода, но также и в том случае, если у вас есть приложение, которое использует разные базы данных, скажем, для каждого клиента / клиента. Если один клиент жалуется на медлительность, вы можете запустить сеанс профилирования, используя его базу данных, и сравнить результаты с "быстрой" базой данных, чтобы определить, какие операции способствуют замедлению. Конечно, существует множество инструментов для повышения производительности на стороне базы данных, но иногда я действительно помогаю увидеть показатели производительности со стороны приложения (так как это ближе к тому, что на самом деле видит пользователь).
Итог: dotTrace отлично работает, и разница неоценима.
AQTime разумен, но имеет некоторую кривую обучения и не так прост в использовании, как встроенный в Team Suite
Текущая версия SharpDevelop (3.1.1) имеет хороший встроенный профилировщик. Он довольно быстрый и очень хорошо интегрируется в среду разработки SharpDevelop и ее NUnit. Результаты отображаются в гибком стиле дерева / списка (используйте LINQ, чтобы создать свой собственный выбор). Двойной щелчок по отображаемому методу переходит прямо в исходный код.
В прошлом я использовал профилировщик, который поставляется с Visual Studio Team System.
Я хотел бы добавить yourkit java и.net profiler. Я люблю его для Java, но еще не пробовал.NET-версию.
Сам не пробовал, но может быть dotTrace? Их приложение ReSharper, безусловно, хорошее. Может быть, dotTrace тоже:)
Я сомневаюсь, что профилировщик, который поставляется с Visual Studio Team System, является лучшим профилировщиком, но я обнаружил, что он достаточно хорош во многих случаях. Что конкретно вам нужно помимо того, что предлагает VS?
РЕДАКТИРОВАТЬ: К сожалению, он доступен только в VS Team System, но если у вас есть доступ к нему, стоит проверить.
Последняя версия профилировщика памяти ANTS (думаю, это 5) просто потрясающая!!! Я преследовал утечку, используя WinDbg и SOS, так как это оказалось лучшим способом раньше, затем я попробовал ANTS, и я получил его за несколько минут. Действительно замечательная часть программного обеспечения.
Я работал с профайлером RedGate в прошлом. Сделал работу за меня.
Если лицензирование является проблемой, вы можете попробовать WINDBG для профилирования памяти
Недавно я тестировал JustTrace от Telerik, и хотя он далек от готового продукта, ребята идут в правильном направлении.
К сожалению, большинство профилировщиков, которые я пробовал, не работали при использовании хвостовых вызовов, особенно ANTS. Я просто пишу свой собственный. На CodeProject есть простая реализация, которую вы можете использовать как основу.
Профилировщик NuMega True Time работает в DevPartner Studio от Micro Focus. Он обеспечивает детализацию на уровне строк и методов для приложений.NET, требующих только PDB, без необходимости в источнике (но это помогает.). Он может отличить алгоритмически тяжелые подпрограммы от тех, которые требуют длительного ввода-вывода, используя наш собственный драйвер синхронизации режима ядра для каждого потока. Версия 10.5 поставляется с новой поддержкой 64 процессов 4 февраля 2011 года. Бесстыдный плагин: я работаю над линейкой продуктов DevPartner. Следите за новостями о запуске 10.5 на http://www.devpartner.com/.
Отказ от ответственности: я менеджер по продукту DevPartner в Micro Focus.
Анализатор производительности Intel® VTune™ для быстрой выборки
Для меня SpeedTrace - лучший инструмент на рынке, потому что он не только помогает вам найти узкие места в ваших приложениях. Это также поможет вам в сценариях устранения неполадок выяснить, почему ваше приложение зависало, ваша установка не была установлена, ваше приложение зависло, производительность вашего приложения иногда низкая в зависимости от ввода данных, например, для выявления медленных транзакций в БД.
Я должен принести вам удивительный инструмент, который я использовал некоторое время назад. AVICode Interceptor Studio. В моей предыдущей компании мы использовали этот замечательный инструмент для профилирования веб-приложения (Предполагается, что это единственное крупнейшее веб-приложение в мире и крупнейший гражданский ИТ-проект, когда-либо сделанный). Команда исполнителей творила чудеса с помощью этого великолепного инструмента. Настроить его сложно, но это разовое занятие, и я бы сказал, что оно того стоит. Оформить заказ на этой странице для деталей.
Спасибо Джеймс
Если вы находитесь на ASP.NET MVC, вы можете попробовать MVCMiniProfiler (http://benjii.me/2011/07/using-the-mvc-mini-profiler-with-entity-framework/)
Я нашел много проблем в большом приложении C#, использующем это.
Обычно проблема возникает во время запуска или завершения работы, когда плагины загружаются, а большие структуры данных создаются, уничтожаются, сериализуются или десериализуются. Часто они создаются и инициализируются более одного раза, а обработчики изменений добавляются несколько раз, что еще больше усугубляет проблему.
В таких случаях программа может быть настолько вялой, что достаточно только 2 выборки, чтобы точно определить виновные сайты вызова метода / функции / свойства.
Мы выбрали YourKit Profiler для.NET в моей компании, так как это было лучшее соотношение цены и качества. Для небольшой компании, которая хочет иметь гибкое лицензирование (плавающие лицензии), это был идеальный выбор - в то время ANTS была медальоном для разработчиков.
Кроме того, он предоставил нам возможность присоединиться к запущенному процессу, что было невозможно с dotTrace. Однако следует помнить, что присоединение - не лучший вариант, так как все.NET будет тормозить, но это был единственный способ профилировать приложения.NET, запущенные другими процессами. С точки зрения функциональности ANTS и dotTrace были лучше, но в итоге YourKit был достаточно хорош.