gpt4 book ai didi

asp.net-mvc - 测量调用 ASP.NET MVC Controller 操作的时间

转载 作者:行者123 更新时间:2023-12-03 11:34:56 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com