MVC 4 应用程序的一些用户遇到了偶发性缓慢的问题。大概不是每个用户每次遇到这个问题时都会报告这个问题。
我的想法是测量每个 Controller 操作所花费的时间,并记录超过规定时间的操作调用的详细信息,以促进进一步分析(排除或排除服务器/代码问题)。
是否有一种方便的方法可以 Hook 来执行此类测量,以便我可以避免向每个操作添加检测代码?我目前没有在这个项目中使用 IOC,并且会犹豫引入它来解决这个问题。
有没有更好的方法来解决此类问题?
最佳答案
你能创建一个全局操作过滤器吗?像这样的东西:
public class PerformanceTestFilter : IActionFilter
{
private Stopwatch stopWatch = new Stopwatch();
public void OnActionExecuting(ActionExecutingContext filterContext)
{
stopWatch.Reset();
stopWatch.Start();
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
stopWatch.Stop();
var executionTime = stopWatch.ElapsedMilliseconds;
// Do something with the executionTime
}
}
然后将其添加到您的
GlobalFilters
“Application_Start()”中的集合GlobalFilters.Filters.Add(new PerformanceTestFilter());
您可以从
filterContext
获取有关正在测试的 Controller 的详细信息。范围。更新
将过滤器添加到
GlobalFilters
直接集合将为所有操作创建过滤器的单个实例。当然,这不适用于计时并发请求。要为每个操作创建一个新实例,请创建一个过滤器提供程序:public class PerformanceTestFilterProvider : IFilterProvider
{
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
return new[] {new Filter(new PerformanceTestFilter(), FilterScope.Global, 0)};
}
}
然后不是直接添加过滤器,而是在
Application_Start()
中添加过滤器提供程序:FilterProviders.Providers.Add(new PerformanceTestFilterProvider());
关于asp.net-mvc - 测量调用 ASP.NET MVC Controller 操作的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11353155/