Профилировку приложения будем выполнять с помощью программы dotTrace компании jetBrains. С документацией по приложению можно ознакомиться здесь –http://www.jetbrains.com/profiler/documentation/.

Старт приложения:

main menu

Стартовать профилировку можно двумя путями:

Через присоединение к процессу.

Нажимаем «Attach To Process». Появляется окно, в котором необходимо выбрать нужный процесс:

Attach to proccesses

 

Кроме выбора процесса можно становить/снять птичку «Start profiling immediately», которая отвечает за то, начинать ли сразу профилировку приложения и выбрать метод измерения (“Measure”), чтобы определить степень детализации и точность измерения времени.

Посмотреть ID процесса можно нажав правой кнопкой на иконке IIS Express и выбрав «Показать все приложения».

View hosts

Через запуск нового экземпляра приложения

Выбираем «Profile» – «IIS Express Application» в появляющемся окне настраиваем следующие поля:

Application path – путь к папке ...Web.App приложения.

Url – url приложения. В нашем случае – это http://localhost.

Убираем галочку «Auto detect port» и вписываем туда нужный порт нашего приложения.

В «Profiling type» - выбираем «Tracing». При выборе данного параметра будет показываться количество вызовов функций.

Если хотим запустить профилировку в определенный момент, тогда снимаем галочку «Start profiling immediately».

Lanch profile

Отличие запуска профилировки одного варианта от другого в том, что при присоединении к процессу нельзя выбрать тип профилировки («Profiling type») отличный от «Sampling».

После нажатия на кнопку «Run» появляется следующее окно:

start profiling

При нажатии кнопки «Start Profiling» начнется профилировка приложения. Для окончания – нажимаем «Get Snapshot».

get snapshot

Результаты профилировки можно просматривать в различных разрезах. Делается это выбором соответствующего пункта.

snapshot menu

Начнем с «Thread Tree». Смотрим поток, который занимает больше всего времени и по нему пытаемся определить, на какие функции тратится больше всего ресурсов. Затрачиваемое время суммируется на каждом уровне.

snapshot thread tree

 

В текущем snapshot-е видно, что основное время тратится на работу с моделью.

snapshot thread tree (version 2)

Если необходимо проверить сколько времени занимает профилируемый код который разрабатываем мы, то переходим в раздел «Plan List» и для удобства поиска группируем данные по «Namespace».

snapshot plan list

 

snapshot plan list (version 2)

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

Кроме этого можно посмотреть кто именно вызвал текущий метод. Делается это через локальное меню:

open method instance

snapshot call tree

На основании полученной информации принимаются решения об оптимизации определенных участков кода.