Jetbrains dottrace что это
- встроенный в Visual Studio 2010 (начиная с Premium редакции) профайлер (MSDN, блог); от RedGate; от JetBrains; от EQATEC.
- public partial class Default : System.Web.UI. Page
- protected void Page_Load( object sender, EventArgs e)
- SampleBadMethod1();
- SampleBadMethod2();
- >
- private void SampleBadMethod1()
- for ( int i = 0; i < 100; i++)
- SampleBadSubMethod1();
- >
- >
- private void SampleBadSubMethod1()
- Thread.Sleep(10);
- >
- private void SampleBadMethod2()
- for ( int i = 0; i < 10000; i++)
- SampleBadSubMethod2();
- >
- >
- private void SampleBadSubMethod2()
- Thread.Sleep(1);
- >
- >
Небольшое лирическое отступление. Сначала хотел выбрать реальное приложение для профайлинга. Выбор пал на Tailspin Spyworks, которое используется в качестве steb-by-step руководства. Казалось бы, руководство для новичков должно быть так отполировано, чтобы сразу заинтересовать разработчика, научить каким-то правильным вещам. И что я там увидел? Кривоватую вёрстку, смесь бизнес-логики и разметки, неоптимальные запросы к БД, select * даже если тянутся 1-2 поля… Выполнять все оптимизации 4 раза (для 4-х профайлеров) оказалось очень трудоёмко, поэтому за 3 минуты было написано используемое в тестах приложение. Если кому-то интересно, в будущих статьях можно будет разобрать по косточкам Tailspin Spyworks.
Довольно лирики, запускаем профайлеры.
Visual Studio Perfomance Profiler
После окончания загрузки страницы в браузере, нажимаем Stop и получаем результат:
Не будем останавливаться на описании профайлера, это достаточно хорошо сделано тут, тут и тут.
Вот как выглядит экран статистики по методам:
Теперь нужно оптимизировать критичные участки кода SampleBadMethod1 и SampleBadMethod2. В качестве «оптимизации» сокращаем количество итераций в цикле (например, со 100 до 50 и c 10000 до 1000).
Получаем ещё раз результат и через пункт меню Analyze->Compare Perfomance Reports сравниваем результат:
Ну что же, мы молодцы, получилось ускорить наше приложение.
Повторим те же действия с другими профайлерами.
ANTS Profiler
При создании новой сессии профайлинга появляется следующее окно:
Подробно рассматривать назначение и функции областей экрана сейчас не буду (это тема отдельной статьи), кратко скажу, что в верхней части видно временную шкалу с загрузкой ЦП (или любым другим показателем, который вы можете выбрать сами), в центре дерево методов со статистикой выполнения по времени и количеству вызовов, в нижней части просмотр исходного кода методов (если код доступен).
Здесь есть некоторая странность: мы видим, что суммарное время выполнения метода SampleBadSubMethod2 равно 14 мс, хотя внутри него задержка на 1 мс и он вызывается 10000 раз. Возможно, ANTS как-то некорректно обрабатывает метод Thread.Sleep.
Теперь снова «оптимизируем» приложение, запускаем профайлер, получаем результат и… не можем сравнить средствами ANTS… В FAQ на сайте предлагают запустить ещё один профайлер и переключаться между ними, сравнивая результат. Ну, спасибо, что ещё сказать :)
dotTrace
При выборе File->Profile появляется окно:
Выбираем тип приложения, задаём настройки и Run!
После запуска профайлинга появляется небольшое окно, с помощью которого можно получить результат (Get Snapshot) или завершить профайлинг.
После получения результата увидим следующее окно:
Здесь видим дерево методов с процентами и временем выполнения. В правой части можно посмотреть исходник того или иного метода.
Оптимизируем приложение, получаем результат и сравниваем с первоначальным:
Ну что ж, оптимизация удалась.
EQATEC Profiler
Запускаем профайлер, видим окно:
Здесь нужно выбрать путь до папки bin приложения, выбрать сборки, которые хотим исследовать на нажать Build.
Затем запускаем свой любимый браузер и загружаем страницу приложения. Если всё нормально, то в логе появится надпись Profiled appication xxx started и станут активными кнопки «Take snapshot» и «Reset counters»
Далее нажимаем «Take snapshot»:
А вот и наш snapshot:
Видим статистику вызовов, а также представление методов в виде блоков (в нижней части). Эти блоки кликабельны, т.е. можно переходить по иерархии вызовов вниз/вверх.
Теперь в очередной раз оптимизируем приложение и сравниваем результат:
Мы опять молодцы, ускорили приложение во много раз.
На этом всё, посмотрим на сводную таблицу возможностей представленных профайлеров
Summary
VS Profiler | ANTS | dotTrace | EQATEC | |
---|---|---|---|---|
Показ относительных результатов выполнения методов (в %) | ||||
Показ абсолютных результатов выполнения методов (в секундах, мс и т.п.) | ||||
Показ числа вызовов методов | ||||
Просмотр исходников методов | ||||
Сравнение результатов двух замеров | ||||
Цена | > 5000$ 1) | от 395$ 2) | от 199$ 3) | бесплатно 4) |
1) в составе VS Premium и выше
2) зависит от редакции
3) для open source проектов бесплатен
4) ограничение на 10 одновременно загружаемых dll, за $ с меньшими ограничениями
Теперь рассмотрим замеченные мной достоинства и недостатки каждого профайлера в отдельности, не указанные в сравнительной таблице.
VS Profiler
ANTS Profiler
самая подробная информация по вызовам методов, куча счетчиков производительности
в режиме профайла SQL думает, что кроме ./SQLEXPRESS серверов больше не существует :)
нет сравнения двух результатов замеров
dotTrace
больше всех понравилась документация
в режиме просмотра дерева какая-то каша из цифр, названий методов, сборок
не запустился в режиме IIS Application, хотя всё делал по хорошей документации.
EQATEC
маленький и быстрый, подходит, если не нужно смотреть производительность построчно и не нужны исходники
данный минус — следствие плюса: меньше, чем у других конкурентов, возможностей.
Итак, сделаю, возможно, субъективный вывод. Мой выбор — EQATEC Profiler, для многих задач оценки производительности его более чем достаточно. Если у вас есть возможность использования VS Premium или Ultimate, встроенный профайлер достаточно неплохой продукт. В этом случае необходимость в покупке других профайлеров отпадёт. Из оставшихся двух профайлеров своей мощью поражает ANTS профайлер, хотя, конечно, почему нет сравнения результатов — непонятно. У dotTrace обилие вариантов приобретения с большим количеством возможностей самого профайлера.
Читайте также: