如何使用自定义动作过滤器计算 asp.net mvc5 中的所有动作 运行 时间?

How to calculate all action running time in asp.net mvc5 with custom action filter?

我想记录 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);
    }

我可能会根据要求将时间存储在适当范围内的位置。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    filterContext.HttpContext.Items["timer"] = Stopwatch.StartNew();
    base.OnActionExecuting(filterContext);
}

这样你就可以避免使用繁琐的字典,而且你的计时器是基于 per request 的。

然后您可以将值转换为 OnActionExecuted

        var sw = filterContext.HttpContext.Items["timer"] as Stopwatch;
        sw.ElapsedMilliseconds...