11

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

这些都不起作用。有任何想法吗?

4

3 回答 3

13

探查器的主页(请参阅“放弃探查器会话”部分)具有正在寻找的使用模式:

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. 它可能只是一个简单的查询字符串混合吗?

于 2011-09-29T23:56:10.717 回答
0

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

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

那么在你看来:

@if(!Request.QueryString.AllKeys.Contains("profiling"))
{
    MiniProfiler.Stop(true);
}
于 2011-09-29T23:54:54.310 回答
0

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

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

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

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

于 2018-11-05T08:21:00.160 回答