我想将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)
语句。
答案 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允许我轻松打开/关闭调试模式,记录,跟踪等添加额外的输出或任何开发和测试环境