Профилировщик MV MV: отображает время профиля для каждого статического ресурса
Я только начал использовать mvc-mini-profiler (http://code.google.com/p/mvc-mini-profiler/), и я думаю, что это потрясающе. Тем не менее, я получаю нечетное поведение при его использовании.
У меня есть сайт ASP.NET Webforms, работающий на IIS7.5, и по какой-то причине, когда я загружаю страницу с включенным профилировщиком, я не только получаю измерение времени для страницы aspx, но и получаю ее за случайные ресурсы css и js на странице.
Профиль aspx работает правильно, и SQL-запрос также правильно профилируется. Однако, как видно из рисунка, я также получаю кучу других результатов, которые, как представляется, являются результатами для статических файлов CSS и JS. Насколько я могу судить, они передаются статически IIS, поэтому код профайлера даже не должен вызываться для них.
Соответствующие части моего Global.asax:
protected void Application_BeginRequest()
{
MiniProfiler profiler = null;
// might want to decide here (or maybe inside the action) whether you want
// to profile this request - for example, using an "IsSystemAdmin" flag against
// the user, or similar; this could also all be done in action filters, but this
// is simple and practical; just return null for most users. For our test, we'll
// profile only for local requests (seems reasonable)
profiler = MiniProfiler.Start();
using (profiler.Step("Application_BeginRequest"))
{
// you can start profiling your code immediately
}
}
protected void Application_EndRequest()
{
MvcMiniProfiler.MiniProfiler.Stop();
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (User == null || !User.Identity.IsAuthenticated)
{
MvcMiniProfiler.MiniProfiler.Stop(true);
}
}
Ожидается ли такое поведение?
Ответы
Ответ 1
Да, это правильно, но их очень легко отфильтровать.
Взято из образца кода в проекте Source
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
// some things should never be seen
var ignored = MiniProfiler.Settings.IgnoredPaths.ToList();
ignored.Add("WebResource.axd");
ignored.Add("/Styles/");
MiniProfiler.Settings.IgnoredPaths = ignored.ToArray();
}
Это позволяет отфильтровать то, что вы хотите увидеть или нет, это образец того, что я исключил в своем веб-приложении, которое я нахожу, работает для моего приложения
ignored.Add("WebResource.axd");
ignored.Add("ScriptResource.axd");
ignored.Add("/Styles/");
ignored.Add("/Images/");
ignored.Add(".js");
Ответ 2
Вы можете поместить это в одну строку и также опустить косые черты. Вот так:
protected void Application_BeginRequest()
{
if (Request.IsLocal)
{
MiniProfiler.Start();
MiniProfiler.Settings.IgnoredPaths = new[] { "static", "webresource.axd", "styles", "images" };
}
}