【发布时间】:2016-07-01 07:43:59
【问题描述】:
我想在 asp.net mvc5 中记录几乎所有操作的执行时间,但基本上使用下面的代码执行此操作是正确的方法,或者它会使项目非常慢?有什么建议吗?
Stopwatch sw = new Stopwatch();
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
sw.Start();
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
sw.Stop();
float f = sw.ElapsedMilliseconds;
base.OnActionExecuted(filterContext);
}
【问题讨论】:
-
这对我来说看起来不错,它绝对不会让你的代码变慢。你可能有一个并发问题。我不确定是否为每个请求创建了一个单独的过滤器实例。如果没有,一旦有多个请求,您可能会得到不正确的测量结果。您可能需要将时间存储在字典中或上下文本身以避免并发问题。
-
@Jim 非常感谢您的建议,时间应该在字典中以避免并发问题。
-
我认为它是按请求使用的,但是发生异常时会发生什么?
-
@Legends 我也有全局异常过滤器。我正在记录它。它重定向到错误页面和客户呼叫:)
-
我的意思是,异常是否会通过 OnActionExecuted 传回,否则 sw 将一直运行直到它被释放。
标签: c# asp.net-mvc-5 stopwatch asp.net-mvc-custom-filter