dotTrace — это профилировщик для .NET-приложений, позволяющий быстро и точно выявлять и устранять проблемы производительности, не покидая Visual Studio или JetBrains Rider. Более подробная информация приведена ниже.
dotTrace помогает находить узкие места в производительности разных .NET-приложений, включая десктопные приложения, приложения .NET Core и приложения ASP.NET, размещенные на веб-серверах IIS или IIS Express, приложения Mono и Unity, сервисы WCF, службы Windows, приложения универсальной платформы Windows и юнит-тесты.
dotTrace позволяет профилировать приложения на основе любой поддерживаемой версии платформ .NET Framework, .NET Core, .NET, Mono 5.10 или более поздних, а также Unity 2018.3 или более поздних.
В отличие от «классического» профилирования производительности, которое позволяет измерять только время вызова метода, хронологический режим показывает, как вызовы распределены по времени.
Благодаря привязке данных о вызовах методов к хронологической шкале этот режим профилирования позволяет получить более углубленную информацию, если сравнивать его с простым подходом определения самого медленного метода: хронологический режим позволяет диагностировать проблемы с производительностью там, где имеет значение порядок событий, например при зависании пользовательского интерфейса, чрезмерной сборке мусора, неравномерном распределении рабочей нагрузки, неоптимизированном файловом доступе и во многих других ситуациях.
При этом в dotTrace сохранены и традиционные режимы профилирования. Профилирование в режиме выборка является самым простым способом оценить общую производительность приложения, а режимы трассировка и построчно идеально подходят для получения сведений о внутренней работе определенного алгоритма.
Вы можете наблюдать плоскостные и объемные срезы данных профилирования с помощью фильтров, дерева вызовов и диаграмм. Применяя фильтры, вы получаете набор временных интервалов, отобранных по определенному условию. Это похоже на отправку запроса в базу данных с целью получить конкретно определенные данные.
Например, чтобы узнать, было ли зависание пользовательского интерфейса вызвано блокирующим процессом сборки мусора, вы можете попросить dotTrace выбрать в главном потоке все временные интервалы, когда пользовательский интерфейс не реагировал и выполнялась блокирующая сборка мусора. Как бы сложно это ни звучало, в действительности данная комбинация фильтров вызывается всего двумя кликами.
Тесная интеграция между dotTrace и Visual Studio позволяет запускать профилирование разрабатываемых приложений, не покидая IDE. А подключив плагин dotTrace к Rider, можно выполнять профилирование производительности с привязкой ко времени, профилировать статические методы, юнит-тесты, запущенные процессы, удаленные приложения и многое другое.
Интеграция с Visual Studio и JetBrains Rider делает профилирование практически бесшовным процессом, поскольку вам больше не нужно переключаться между IDE и профилировщиком.
dotTrace позволяет с легкостью анализировать асинхронный код: все части async
-вызова показаны в одном месте, поэтому вам не нужно разыскивать их в разных стеках вызовов.
dotTrace позволяет моментально профилировать любой статический метод из вашего кода. Просто переместите курсор на метод, нажмите Alt+Enter и выберите Debug | Profile в списке действий.
Просто представьте, какие возможности открывает эта функциональность, — вы можете профилировать любую часть кода там же, где вы его написали! Не нужно выполнять сборку решения, запускать его в профилировщике, выполнять набор действий, позволяющих запустить ваш новый код, и т. п.
Большую часть времени профилировать приходится локально запущенные приложения. Однако что делать, если медленно работающее приложение находится на удаленном веб-сервере?
dotTrace позволяет подключаться к удаленному компьютеру для профилирования автономного приложения, веб-приложения или службы Windows. Вам даже не придется устанавливать dotTrace на удаленный компьютер: просто скопируйте несколько файлов.
dotTrace можно подключать к работающим приложениям и отключать по окончании сбора данных профилирования.
Это сводит к минимуму накладные расходы, вызванные запуском приложения под профилировщиком. Что более важно, это позволяет выявлять причины падения производительности в эксплуатационном окружении, где недопустимо перезапускать приложение каждый раз, когда требуется выполнить профилирование.
Если у вас есть пакет Visual Studio + ReSharper* или JetBrains Rider**, вы можете с легкостью запускать профилирование юнит-тестов из редактора кода или инструмента для запуска юнит-тестов.
* Даже если ReSharper не установлен, вы все равно можете профилировать нативный инструмент для запуска юнит-тестов, например от NUnit, MSTest или xUnit.
** Функции профилирования доступны только владельцам лицензий dotUltimate или All Products Pack.
В ходе анализа снэпшотов хронологического профилирования вы можете (с помощью фильтра) выделить только те временные интервалы, когда ваше веб-приложение обрабатывало входящие HTTP-запросы. Получите конкретные данные, выявите медленно выполняющиеся методы и определите истинную причину проблемы. Заставьте свои веб-приложения работать быстрее с помощью хронологического профилирования.
Используйте хронологическое профилирование, чтобы проанализировать влияние определенных запросов на производительность приложения. Фильтр SQL-запросы показывает все SQL-запросы и SQL-подключения вместе со статистикой по их производительности.
Содержимое запросов можно открыть в отдельном окне для дальнейшего анализа. Вы можете выбрать один или несколько запросов в качестве фильтров для всех остальных данных, после чего перейти к изучению методов, инициировавших запросы.
Оставим неэффективные SQL-запросы в прошлом!
Profiling SDK позволяет контролировать сеанс профилирования непосредственно из кода: автоматически запускать или останавливать сбор данных профилирования, сохранять полученные снэпшоты и так далее.
Это делает возможными два ценных сценария. Во-первых, вы можете использовать SDK, чтобы сузить охват профилирования и выбрать, какие части кода следует профилировать. Второй сценарий — самопрофилируемые приложения: вы можете выполнять сбор статистики, показывающей, как ваше приложение работает на компьютерах конечных пользователей.
В комплекте с dotTrace поставляются инструменты командной строки, которые можно использовать для автоматизации сбора снэпшотов профилирования, что крайне важно, если вы хотите встроить профилирование в состав своих сборок непрерывной интеграции.
Если в качестве CI-сервера вы используете JetBrains TeamCity, не забудьте установить плагин dotTrace для TeamCity. Плагин помогает предотвратить снижение производительности приложений, выполняя профилирование тестов интеграции. Все, что необходимо сделать, — это установить порог времени выполнения теста, и если оно будет превышено, плагин автоматически создаст снэпшот производительности и завершит тест со статусом «неудача».
Бывает так, что, потратив часы на оптимизацию ресурсоемкой функции, разработчики вынуждены начинать профилирование с нуля, чтобы увидеть, есть ли эффект от их оптимизации.
С dotTrace это не проблема. Профилировщик может моментально пересчитать тайминги всех функций в снэпшоте на основании заданного вами значения корректировки времени, при этом перепрофилировать приложение не требуется. Вы словно задаете профилировщику вопрос «что будет, если я оптимизирую эту функцию на 40%?». Просто укажите новое время функции или всех функций определенного класса. Пересчет показателей времени будет осуществлен во всем снэпшоте.
dotTrace позволяет сравнивать два любых снэпшота производительности, относящихся к одному и тому же приложению. Профилировщик создает сравнительный снэпшот, который показывает разницу в числе вызовов и времени, затраченном каждой функцией. Сравнительные снэпшоты можно просматривать и анализировать так же, как и обычные снэпшоты производительности.
Доступна бесплатная пробная версия на 30 дней