Введение в мини-профайлер на языке C-sharp — Технолаб iFour

Для разработчика основной задачей является отладка и оптимизация запросов, которые пишутся под запрос, сделанный к серверу. Невозможно получить точное время запроса запросов для каждой страницы. Обычно разработчик считает количество запросов, таких как один, два, три и вычисляет среднее значение, но это не решение, и как разработчик, мы этого не хотим. В инструментах разработчика сетевые вкладки предоставляют информацию о времени на запрос, сделанный для загрузки страницы, но этого недостаточно для разработчика, чтобы понять, какой запрос занимает больше времени и какой запрос требует оптимизации. Это можно сделать с помощью Mini-profiler.

Введение в Mini-profiler

Mini-profiler — это библиотека профилирования, которая используется для мониторинга производительности вашего приложения ASP.NET. Она используется в производстве из-за производительности. Mini-profiler разработан командой stack exchange, он доступен как пакет NuGet и прост в использовании.

Mini-profiler можно использовать с высокопроизводительными микро ORM, поддерживающими SQL сервер, MySQL, SQLite и т.д. MVC Mini-profiler — это внутренний профилировщик, который требует некоторой модификации исследуемых страниц. Чтобы использовать профилировщик, разработчику необходимо сделать два изменения.

  • Предпочесть главную страницу, которая используется для вызова необходимых CSS и JavaScript файлов.
  • В запросах Application_Begin и Application_End требуется запустить и остановить профилировщик, для чего используется JQuery 1.6.1. Разработчик может вызвать Mini-профилировщик в пределах заданного представления или контроллера. Наиболее полезной особенностью Mini-profiler является его интеграция с фреймворком DB. Мини-профайлер поддерживает Entity Framework и LINQ to SQL благодаря встроенному в .NET классу Db-connection. Количество запросов и время, которое они занимают, включается в выполняемый в данный момент шаг. Для выявления распространенных ошибок типа N+1 антипаттерн профайлер обнаружит несколько запросов, отличающихся только значением аргумента.

Что профилирует мини-профайлер?

Мини-профайлер не прикрепляется к каждому вызову, это может быть инвазивным и не сфокусированным на производительности.

Мини-профилировщик предоставляет следующую возможность:

  • Профилировщик ADO.Net используется для профилирования вызовов на сыром ADO.Net, SQL Server, Oracle, Linq to SQL, Entity framework, который включает code first и EF core, а также ряд других сценариев доступа к данным.
  • Mini-profiler обеспечивает прагматичную пошаговую инструментацию, которая может быть добавлена в код для явного профилирования.

Где используется Mini-profiler?

Stack Overflow разрабатывает Mini-profiler. Он используется в продакшене, и сайты семейства Stack Exchange используют Mini-profiler.

Давайте начнем с примера:

Читать далее: Test Driven Development In MVC

Шаг 1: Создайте приложение asp.net
Запустите visual studio 2019

Откройте стартовое окно и выберите создать новый проект.

На странице Создать новый проект найдите в окне поиска шаблон веб-приложения Asp.Net и выберите Далее.

Введите DemoLibrary в поле Project name на странице configure your new project. Затем нажмите кнопку Createbutton.

Шаг 2: Установите NuGet-пакет Min-profiler .mvc5
Установите NuGet-пакет mini-profiler.mvc5 из менеджера пакетов NuGet, который используется для обеспечения корректной интеграции с ASP.NET MVC.

Щелкните правой кнопкой мыши на проекте и выберите Manage NuGet package.

Найдите miniprofiler.mvc5 на странице NuGet в окне поиска. ВыберитеMiniProfiler.Mvc5 из списка, а затем нажмите на кнопку Install.

Шаг 3: Добавьте конфигурацию для мини-профайлера
Добавьте конфигурацию в файл Global.asax в метод application_start.

Добавьте следующий блок кода внутри метода application_start в файл Global.asax.

Для использования метода MiniProfiler.Configure() необходимо добавить библиотеку StackExchange.Profiling; в файл Global.asax.


MiniProfiler.Configure(new MiniProfilerOptions());

Вход в полноэкранный режим Выход из полноэкранного режима

Добавьте метод Application_beginrequest() и Application_endrequest() в файл Global.asax


protected void Application_beginrequest()
{
MiniProfiler profiler = null;
if (Request.IsLocal)
{
profiler = MiniProfiler.StartNew();
}
}
protected void Application_endrequest()
{
MiniProfiler.Current?.Stop();
}

Войдите в полноэкранный режим Выйти из полноэкранного режима

Шаг 4: Добавьте скрипт на страницу просмотра

Самый простой способ добавления скрипта — добавить скрипт в shared/_Layout.cshtml master view.Add с использованием пространства имен StackExchange.Profiling;, чтобы использовать метод @MiniProfiler.Current.RenderIncludes() на странице просмотра.

Добавьте следующий однострочный код в страницу _Layout.cs:


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

Вход в полноэкранный режим Выйти из полноэкранного режима

Шаг 5: Добавление конфигурации для запроса маршрута
Запустим проект, и ничего не произойдет, потому что Miniprofiler зависит от JavaScript и .js запроса, поэтому .net запрос не выполняется.

Добавьте следующий блок кода в файл конфигурации

Теперь запустите ваш проект, и вы получите MiniProfiler UI в левом углу приложения и, нажав на него, вы получите информацию о времени выполнения.

Шаг 6: Отслеживание контроллера MVC

Текущий вид отображает общее время выполнения, что не очень удобно. В приложении MVC, добавив новый фильтр в конвейер, можно получить больше информации о времени выполнения каждого действия.

Планируете нанять компанию по разработке сайтов на C#? Ваши поиски закончатся здесь.

Добавьте следующую строку в файл FilterConfig


filters.Add(new ProfilingActionFilter());

Вход в полноэкранный режим Выйти из полноэкранного режима

И добавьте пространство имен using StackExchange.Profiling.Mvc;.

Теперь запустите ваше приложение, и вы увидите время выполнения контроллера.

Шаг 7: Начните использовать его.
Вот пример кода для пробы.

Добавьте следующий блок кода в метод Index контроллера Home


public ActionResult Index()
{
var profiler = MiniProfiler.Current;
using (profiler.Step("set page title"))
{
ViewBag.title = "home page";
}
using (profiler.Step("doing complex stuff"))
{
using (profiler.Step("step a"))
{
// simulate fetching a url
using (profiler.CustomTiming("http", "get http://google.com"))
{
Thread.Sleep(10);
}
}
using (profiler.Step("step b"))
{
// simulate fetching a url
using (profiler.CustomTiming("http", "get http://stackoverflow.com"))
{
Thread.Sleep(20);
}
using (profiler.CustomTiming("redis", "set "mykey" 10"))
{
Thread.Sleep(5);
}
}
}
// now something that loops
for (int i = 0; i < 15; i++)
{
using (profiler.CustomTiming("redis", "set "mykey" 10"))
{
Thread.Sleep(i);
}
}
return View();
}

Вход в полноэкранный режим Выйти из полноэкранного режима

Запустите ваше приложение

Используя MiniProfiler, вы можете заметить интересную информацию о том, что код вызывает одно и то же 15 раз и сколько времени тратится на различные операции, например (HTTP, Redis).

Заключение

В этом блоге мы рассмотрели, как использовать Mini-Profiler в ASP.NET MVC, который используется для мониторинга производительности вашего приложения, а также рассмотрели примеры, отображающие время выполнения приложения.

Оцените статью
Procodings.ru
Добавить комментарий