Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用自定义操作筛选器计算asp.net mvc5中的所有操作运行时间?_C#_Asp.net Mvc 5_Stopwatch_Asp.net Mvc Custom Filter - Fatal编程技术网

C# 如何使用自定义操作筛选器计算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

我想记录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);
}
这样可以避免使用繁琐的字典,并且计时器是基于每个请求的

然后可以在
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传回,否则软件将运行直到它被释放。