Подтвердить что ты не робот

Использование MiniProfiler с MVC 5

Edit Получил ответ здесь

Итак, я хотел проверить MiniProfiler для устранения некоторых проблем с производительностью. Прежде чем использовать его на производственном коде, я хотел попробовать его с помощью образца, поэтому пошел на создание приложения MVC 5. Это простое приложение для ванилин, которое создается с помощью шаблона.

Добавлен этот код в метод Index() HomeController:

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"))
            { // something more interesting here
                Thread.Sleep(100);
            }
            using (profiler.Step("Step B"))
            { // and here
                Thread.Sleep(250);
            }
        }
        return View();

Добавлена ​​эта строка ниже пакета jquery в _Layout:

@Scripts.Render("~/bundles/jquery")
@StackExchange.Profiling.MiniProfiler.RenderIncludes()

@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)

Запустите приложение. Ничего не видно. Нет профилирования, ничего.

Что мне не хватает?

С уважением.

4b9b3361

Ответ 1

Это то, что я должен был сделать, чтобы MiniProfiler работал в моем проекте ASP.NET MVC5:

  • Установлены пакеты MiniProfiler и MiniProfiler.MVC4 NuGet (пакет MVC4 поддерживает MVC5)

  • Добавьте следующее в Application_Start() в Global.asax:

    protected void Application_Start()
    {
        ...
        // Setup profiler for Controllers via a Global ActionFilter
        GlobalFilters.Filters.Add(new ProfilingActionFilter());
    
        // initialize automatic view profiling
        var copy = ViewEngines.Engines.ToList();
        ViewEngines.Engines.Clear();
        foreach (var item in copy)
        {
            ViewEngines.Engines.Add(new ProfilingViewEngine(item));
        }
    }
    
  • Добавьте следующее в "Application_BeginRequest()" и "Application_EndRequest()", также в Global.asax:

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
        {
            MiniProfiler.Start();
        }
    }
    
    protected void Application_EndRequest()
    {
        MiniProfiler.Stop();
    }
    
  • Добавьте следующее в _Layout.cshtml(непосредственно перед тегом </body>):

        ...
        @StackExchange.Profiling.MiniProfiler.RenderIncludes()
    </body>
    </html>
    
  • Добавьте следующее в раздел <handlers> в Web.config:

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

Этого было достаточно для профилирования каждого из действий и представлений контроллера MVC.


В моем конкретном проекте я использовал Entity Framework 6, поэтому я также сделал следующее:

a) Установлен пакет MiniProfiler.EF6

b) Добавлен следующий в конец Application_Start() в Global.asax:

    ...
    MiniProfilerEF6.Initialize();
}

Ответ 2

Также вам нужно добавить вызов:

MiniProfiler.Start();

В Global.asax.cs к событию Application_BeginRequest.

и

MiniProfiler.Stop();

В Global.asax.cs для события Application_EndRequest.