如何隐藏miniprofiler?

时间:2011-09-29 23:49:38

标签: c# asp.net-mvc-3 profiling mvc-mini-profiler

我正在使用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);
}

这些都没有奏效。有什么想法吗?

3 个答案:

答案 0 :(得分:13)

探查器的home page(参见“放弃探查器会话”部分)的使用模式正在寻找:

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

CurrentUserIsAllowedToSeeProfiler的实现将检查查询字符串是否包含触发分析器的键。


修改

您还可以查看他们的Example Project,了解他们在某些情况下如何实施禁用功能。他们的检查是看你是否通过localhost访问它,但你可以改为检查查询字符串。

基于此,看来“尝试#1”应该是诀窍。请注意,“关闭”和“尝试#1”之间的区别在于前者正在查找查询字符串profiling,而您的尝试#1正在检查showProfiler。它可能只是一个简单的查询字符串混合?

答案 1 :(得分:0)

在开始请求事件中正常启动探查器。然后在您的控制器或视图中,检查查询字符串并调用MiniProfiler.Stop(true)以丢弃已分析的数据(如果它没有或设置为false)。

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

然后在你看来:

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

答案 2 :(得分:0)

我在上面没有找到解决方案。

对我来说,唯一的解决方案是在 Web.Config 文件中设置 debug =“ false”

<compilation defaultLanguage="c#" debug="false" batch="false" targetFramework="4.5.2">

希望这对其他人也有帮助。