MiniProfiler для ASP.NET MVC приложений

MiniProfiler от StackExchange это простой, удобный (и бесплатный) инструмент для профилирования ASP.NET MVC приложений и запросов базам данных.

Установка

Для установки MiniProfiler необходимо, с помощью NuGet, добавить в проект установочные пакеты:

  • MiniProfiler.MVC3 – для ASP.NET MVC 3 приложений;
  • MiniProfiler.MVC4 – для ASP.NET MVC 4/5 приложений;
  • MiniProfiler.EF5 – для просмотра SQL запросов, сделанных с помощью Entity Framework 5;
  • MiniProfiler.EF6 – аналогично, но для 6 версии Entity Framework;
  • MiniProfiler.Raven – поддержка для RavenDB.

Настройка

Запуск и остановка MiniProfiler

В Global.asax.cs необходимо добавить следующий код:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        ...
        MiniProfilerEF6.Initialize();
    }

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
            MiniProfiler.Start();
    }

    protected void Application_EndRequest()
    {
        MiniProfiler.Stop();
    }
}

В данном примере, MiniProfiler используется для Entity Framework 6 и запускается только при локальных запросах. На сайте проекта также доступны примеры для Entity Framework 4/5, Linq-to-Sql, RavenDB.

Кроме того, для подключения профайлера только в режиме отладки можно использовать директивы #if DEBUG .. #endif. Разумеется, такой же подход тогда необходимо использовать и в следующем шаге.

Вывод результатов на страницы

В любом месте _Layout.cshtml или конкретной страницы, но обязательно после загрузки jQuery, нужно вставить следующий вызов:

@using StackExchange.Profiling
<!DOCTYPE html>
<html>
<head>
    ...
</head>
<body>
    ...

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
    @MiniProfiler.RenderIncludes()
</body>
</html>

Конфигурация Web.config

MiniProfiler требует чтобы был включен параметр runAllManagedModulesForAllRequests:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
       ...
    </modules>    
  </system.webServer>

В противном случае (false) отладочная информация не будет выведена на веб страницу.

Если изменение значения runAllManagedModulesForAllRequests на true не желательно, то можно установить обработчик профайлера следующим образом:

<system.webServer>
   ...
   <handlers>
      <add name="MiniProfiler" 
           path="mini-profiler-resources/*" 
           verb="*"
           type="System.Web.Routing.UrlRoutingModule" 
           resourceType="Unspecified" 
           preCondition="integratedMode" />
   </handlers>
</system.webServer>

Профайлер готов к работе.

Профилирование

Если теперь запустить веб-приложение, то можно увидеть информацию о времени выполнения запросов:

Request profiler

Можно посмотреть SQL запросы, которые были сформированы и выполнены с помощью Entity Framework:

SQL profiler SQL view

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

SQL duplicates

Как видите, MiniProfiler простой в установке и использовании, но очень полезный инструмент для веб-разработч��ка.

Комментарии (5) -

Алексей 08.04.2014 19:34:23

А есть какие-либо приемущества перед glimpse http://getglimpse.com/ ?

@ Алексей: Простота для своих целей. Glimpse мне видится как более тяжелый (во всех смыслах) и мощный инструмент. Так же не нашел у Glimpse  поиска дубликатов запросов. Хотя возможно есть смысл сделать и его небольшое описание.

@ Andrey: если у них разные ниши, то тем более нужно сделать обзор ;)

Алексей 10.04.2014 0:36:37

@ Andrey:
Glimpse показывает дубликаты запросов http://i.imgur.com/jizQwKz.png

@ Алексей: Отлично.

Добавить комментарий