Как скрыть минипрофилер?

Я использую профилировщик MVC Mini, чтобы проверить скорость отдельных частей моего приложения, и хотел бы сохранить его там на всякий случай, если что-то случится позже, и мне может потребоваться проверить "что происходит не так". Это не полный набор журналов, но довольно полезно знать, что делает страницу длительной.

Итак, моя цель - скрыть его и иметь профиль только тогда, когда запрос поставляется с определенным параметром. Однако ни одна из моих попыток не работала так, как я ожидал.

Это сделало трюк не показывать его на экране (код в представлении):

@if (Request.QueryString.AllKeys.Contains("showProfiler"))
{ 
    @MvcMiniProfiler.MiniProfiler.RenderIncludes()
}

Это попытка, которая приблизилась. Правильно скрывает информацию о мини-профилировщике, но в настоящий момент я показываю ее, она просматривает все, так как я не показывал ее. Итак, скажем, что я просматриваю свою страницу и занимает 3 секунды. Я удаляю параметр запроса и загружаю страницу еще три раза. Я снова добавляю свой параметр и вижу 4 набора информации профиля. Это означает, что он отслеживает все, и мне интересно, могут ли проблемы с памятью.

Попытки сделать это не так:

Попытка 1:

protected void Application_BeginRequest()
{
    if (Request.QueryString.AllKeys.Contains("showProfiler"))
    {
        MiniProfiler.Start();
    }
}

Попытка 2:

protected void Application_EndRequest()
{
    MiniProfiler.Stop(!Request.QueryString.AllKeys.Contains("showProfiler"));
}

Попытка 3:

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

Ничего из этого не получилось. Любые идеи?

Ответ 1

Домашняя страница (см. раздел "Отказ от раздела сеанса профилировщика" ) профилировщика, который использует шаблон использования:

protected void Application_BeginRequest()
{
   MvcMiniProfiler.MiniProfiler.Start();  
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
   if(!CurrentUserIsAllowedToSeeProfiler())
   {
       MvcMiniProfiler.MiniProfiler.Stop(discardResults: true);
   }
}

Ваша реализация CurrentUserIsAllowedToSeeProfiler будет проверять, содержит ли строка запроса ключ, запускающий профилировщик.


ИЗМЕНИТЬ

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

Исходя из этого, кажется, что "попытка №1" должна быть трюком. Обратите внимание, что различие между тем, которое "близко" и "попытка №1", является первым, ищет строку запроса profiling, тогда как ваша попытка №1 проверяет значение showProfiler. Может быть, это было просто смешение строки запроса?

Ответ 2

Просто запустите профайлер, как обычно, в событии начала запроса. Затем в вашем контроллере или представлении проверьте строку запроса и вызовите MiniProfiler.Stop(true), чтобы отбросить профилированные данные, если он не установлен или установлен в значение false.

protected void Application_BeginRequest()
{
    MiniProfiler.Start();  
}

Тогда, на ваш взгляд:

@if(!Request.QueryString.AllKeys.Contains("profiling"))
{
    MiniProfiler.Stop(true);
}