3

我想为我的 MVC3 应用程序使用 MiniProfiler,所以我关注了Scott Hanselman 的博客文章

我的 Global.asax.cs 文件具有必要的更改,例如源的 MVC 示例

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

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

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

如何仅针对本地呼叫或在调试模式下运行进行此检查?在任何情况下,它都应该执行该user = UserService.SelectUserDetail(userId)语句。

4

2 回答 2

3

如果我正确理解您的问题,您只想在本地运行(或调试)时调用 MiniProfiler 的.Step()扩展方法,对吗?

如果是这样,这有点违背了 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语句出现在您的生产代码中,您应该熟悉预处理器指令。也看到这个问题。但是,出于此目的,我强烈建议不要使用它们,因为没有必要。

于 2013-01-23T20:54:17.163 回答
-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 允许我轻松打开/关闭调试模式、日志记录、跟踪等。为开发和测试环境添加额外的输出或任何内容

于 2015-11-09T14:07:20.690 回答