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

标签 asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

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/

相关文章:

c# - 使用新值更新现有对象

asp.net - 用户能够使用 DirectoryEntry 连接到 Active Directory 的最低权限是什么

c# - ASP.NET MVC 不明确的操作方法

javascript - 返回部分 View 和消息

c# - 系统.Web.HttpCompileException :The type '<>' is defined in an assembly that is not referenced

angularjs - 如何让 StructureMap 与 AngularJs/MVC5 和 WebApi2 Web 项目一起工作

c# - 来自已发布的 Web 应用程序部署的部分 ASP.NET WEB

asp.net-mvc - 当 MVC 托管在 Azure 中时,为什么 MultipartFormDataContent 不起作用?

.NET Web API : Class level validation attribute causes Web API to throw ArgumentNullException if instance is null

c# - 我的 MVC4 路由、参数、构造函数有什么问题?