仅将MiniProfiler用于调试或本地请求

时间:2013-01-22 12:40:47

标签: asp.net-mvc asp.net-mvc-3 debugging mvc-mini-profiler

我想将MiniProfiler用于我的MVC3应用程序,所以我跟着Scott Hanselman's blog post

我的Global.asax.cs文件具有必要的更改,如source's MVC sample

但我想在我的控制器中测量一个特定的电话。 所以我把这段代码放在控制器中:

if (Request.IsLocal)
{
    var profiler = MiniProfiler.Current;
    using (profiler.Step("SelectUserDetail Function"))
    {
        user = UserService.SelectUserDetail(userId);
    }
}

我怀疑我的代码永远不会出现在生产环境中,因为我正在Request.IsLocal检查中包装此块。

如何只检查本地调用或是否在调试模式下运行?无论如何,它应该执行user = UserService.SelectUserDetail(userId)语句。

2 个答案:

答案 0 :(得分:2)

如果我理解你的问题,你只想在本地(或调试)运行时调用MiniProfiler的.Step() extension method,对吗?

如果是这样,这有点违背了MiniProfiler的目的,即将所有这些工具用于生产代码而不影响生产

我相信您可以在代码中执行此操作:

using (MiniProfiler.Current.Step("SelectUserDetail Function"))
{
    user = UserService.SelectUserDetail(userId);
}

它对您的应用程序几乎无影响;我们在Stack Overflow上的代码中完成了数百次,没有问题(以及每个数据库查询)。

您只需要在收到新请求时进行检查:

protected void Application_BeginRequest()
{
    if (Request.IsLocal) { MiniProfiler.Start(); }
}

当您在制作中投放时,对MiniProfiler.Current.Step()的任何调用都不会返回任何内容,因为分析器是null(扩展方法之美)。

如果您仍想阻止任何using语句出现在您的生产代码中,您应该熟悉preprocessor directives。另见this question。但是,为了这个目的,我强烈建议不要这样做,因为没有必要。

答案 1 :(得分:-1)

我通常创建类似DebugHelper静态类的东西,并在那里定义:

public static class DebugHelper
        {
            private static bool? _isDebugEnabled = false;
            public static bool IsDebug
            {
                get
                {
                    if (!_isDebugEnabled.HasValue)
                    {
                        _isDebugEnabled = false;
    #if DEBUG
                        _isDebugEnabled = true;
    #endif
                    }
                    //may be extra rules like   check for some debug key in HttpContext.Current etc.
                    return _isDebugEnabled.Value;
                }
                set { _isDebugEnabled = value; }
            }

            public static bool IsDevEnvironment
            {
                get
                {
                    string environment = settingsService.GetSettingByKey<string>("environment");
                    return environment == "dev";
                }
            }
            public static bool IsTestEnvironment
            {
                get
                {
                    string environment = settingsService.GetSettingByKey<string>("environment");
                    return environment == "test";
                }
            }

DebuHelper允许我轻松打开/关闭调试模式,记录,跟踪等添加额外的输出或任何开发和测试环境