C# 如何使用自定义操作筛选器计算asp.net mvc5中的所有操作运行时间?
我想记录asp.net mvc5中几乎所有操作的执行时间,但基本上使用下面的代码这样做是正确的方法,还是会使项目非常缓慢?有什么建议吗C# 如何使用自定义操作筛选器计算asp.net mvc5中的所有操作运行时间?,c#,asp.net-mvc-5,stopwatch,asp.net-mvc-custom-filter,C#,Asp.net Mvc 5,Stopwatch,Asp.net Mvc Custom Filter,我想记录asp.net mvc5中几乎所有操作的执行时间,但基本上使用下面的代码这样做是正确的方法,还是会使项目非常缓慢?有什么建议吗 Stopwatch sw = new Stopwatch(); public override void OnActionExecuting(ActionExecutingContext filterContext) { sw.Start(); base.OnActionExecuting(filterCo
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);
}
我可能会根据请求将时间存储在一个适当的范围内的位置
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Items["timer"] = Stopwatch.StartNew();
base.OnActionExecuting(filterContext);
}
这样可以避免使用繁琐的字典,并且计时器是基于每个请求的
然后可以在OnActionExecuted
var sw = filterContext.HttpContext.Items["timer"] as Stopwatch;
sw.ElapsedMilliseconds...
我可能会根据请求将时间存储在一个适当的范围内的位置
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Items["timer"] = Stopwatch.StartNew();
base.OnActionExecuting(filterContext);
}
这样可以避免使用繁琐的字典,并且计时器是基于每个请求的
然后可以在OnActionExecuted
var sw = filterContext.HttpContext.Items["timer"] as Stopwatch;
sw.ElapsedMilliseconds...
在我看来这没问题,它绝对不会让你的代码变慢。不过,您可能存在一致性问题。我不确定是否为每个请求创建了单独的筛选器实例。如果没有,那么一旦有多个请求,您可能会有不正确的测量值。您可能需要将计时存储在字典或上下文本身中,以避免并发问题。@Jim非常感谢您的建议。对于避免并发问题,计时应该存储在字典中。我想它是每个请求使用的,但是发生异常时会发生什么情况?@Legends我也有全局异常筛选器。我正在记录它。它重定向到错误页面,客户调用:)我的意思是,异常是否会通过OnActionExecuted传回,否则软件将运行,直到它被释放。在我看来,这是正常的,它肯定不会使代码变慢。不过,您可能存在一致性问题。我不确定是否为每个请求创建了单独的筛选器实例。如果没有,那么一旦有多个请求,您可能会有不正确的测量值。您可能需要将计时存储在字典或上下文本身中,以避免并发问题。@Jim非常感谢您的建议。对于避免并发问题,计时应该存储在字典中。我想它是每个请求使用的,但是发生异常时会发生什么情况?@Legends我也有全局异常筛选器。我正在记录它。它重定向到错误页面,客户调用:)我的意思是,异常是否会通过OnActionExecuted传回,否则软件将运行直到它被释放。