测量ASP.NETMVC3性能我正在ASP.NETMVC3中构建一个JSON服务,我希望能够测量其中操作的执行时间应用程序(我希望它自动记录缓慢的操作)。所以它看起来很棒;http://coderjournal.com/2010/10/timing-the-execution-time-of-your-mvc-actions/(这里也提到了堆栈溢出的某个地方)问题是我得到的一定是错误的;我添加了另一个秒表,它开始运动中的第一件事并在返回之前停止。示例:我相信firefox在这里有正确的时间(但它包含一个下载所以它有点大),但我想了解为什么属性代码不起作用,对此有什么想法吗?这可能不是它显示执行时间长的原因,但当您一次有多个请求时,该属性将无法很好地与mvc3一起使用。在以前版本的ASP.NETMVC中,操作筛选器是针对每个请求创建的,少数情况除外。这种行为永远不是保证的行为,它只是一个实现细节,过滤器的合同是将它们视为无状态的。在ASP.NETMVC3中,过滤器被更积极地缓存。因此,任何错误存储实例状态的自定义操作过滤器都可能被破坏。我建议在OnActionExecuting中实例化新秒表并将其保存到HttpContext.Current.Items-然后您可以在OnActionExecuted中检索它并打印出结果。除了回答https://stackoverflow.com/a/5823555/504082,更正确的方法是在时钟执行结束时使用OnResultExecuted覆盖。当您返回ActionResponse.Success(arr.Select(x=>func(x)).ToJson();即由于您的操作而导致的一些惰性LINQ语句时,它将在操作“执行”后计算(函数'func'执行不计入动作执行时间。我有这个讨厌的错误,无法弄清楚为什么我的动作“执行时间”是100毫秒,尽管Web请求在10秒内执行。修改后的代码。使用System.Collections.Generic;使用系统诊断;使用System.Linq;使用System.Web;使用System.Web.Mvc;命名空间SW{publicclassStopwatchAttribute:ActionFilterAttribute{publicoverridevoidOnActionExecuting(ActionExecutingContextfilterContext){varstopwatch=newStopwatch();filterContext.HttpContext.Items["秒表"]=秒表;秒表.Start();}publicoverridevoidOnResultExecuted(ResultExecutedContextfilterContext){varstopwatch=(Stopwatch)filterContext.HttpContext.Items["Stopwatch"];秒表.Stop();varhttpContext=filterContext.HttpContext;varresponse=httpContext.Response;response.AddHeader("X-Runtime",stopwatch.Elapsed.TotalMilliseconds.ToString());}}}为什么不看看Rhinocommons的页面性能模块?看起来你已经停滞了一个数量级。您确定您正确阅读了结果吗?尝试使用Stopwatch.ElapsedMilliseconds属性。以上就是《C#学习教程:衡量ASP.NETMVC3的性能》的全部内容,如果对您有所帮助,您需要进一步了解C#学习教程,希望您多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
