2014-03-29 2 views
13

Edit Получил ответ hereИспользование MiniProfiler с MVC 5

Так что я хотел, чтобы проверить 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) 

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

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

С уважением.

ответ

5

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

MiniProfiler.Start(); 

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

И:

MiniProfiler.Stop(); 

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

27

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

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

  2. Добавьте следующие 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)); 
        } 
    } 
    
  3. Добавьте следующее 'Application_BeginRequest()' и 'Application_EndRequest()', а также в Global.asax:

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

    ... 
        @StackExchange.Profiling.MiniProfiler.RenderIncludes() 
    </body> 
    </html> 
    
  5. Добавьте следующий к <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, поэтому я также сделал следующее:

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

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

... 
    MiniProfilerEF6.Initialize(); 
} 
+0

Удивительно, я не знал о возможности автоматического контроля и просмотра профилирования – Squazz