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>
Профайлер готов к работе.
Профилирование
Если теперь запустить веб-приложение, то можно увидеть информацию о времени выполнения запросов:
Можно посмотреть SQL запросы, которые были сформированы и выполнены с помощью Entity Framework:
Кроме того, можно найти одинаковые запросы, отличающиеся только параметрами. Это хорошее начало для оптимизации работы с базой данных:
Как видите, MiniProfiler простой в установке и использовании, но очень полезный инструмент для веб-разработчика.