如何计算在MVC中执行操作所用的时间

时间:2018-04-26 05:21:39

标签: c# asp.net-mvc

我想计算任何操作所用的时间并将其保存在数据库中。 我不要在所有行动中使用秒表。

我正在寻找一种可以应用于整个项目asp.net MVC的方法 换句话说每次执行一个动作都会发生一个事件?

2 个答案:

答案 0 :(得分:4)

你必须做这样的事情。 1.创建过滤器。

public class ActionExecutionTimeAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            filterContext.HttpContext.Items["ActionName"] = filterContext.HttpContext.Request.RawUrl;
            filterContext.HttpContext.Items["StartTime"] = DateTime.UtcNow;
            base.OnActionExecuting(filterContext);
        }
        // Do this to calculate only Action Execution Time
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            base.OnActionExecuted(filterContext);
            DateTime startTime = (DateTime)filterContext.HttpContext.Items["StartTime"];
            System.Diagnostics.Debug.WriteLine(filterContext.HttpContext.Items["ActionName"].ToString() + "-" + (DateTime.UtcNow - startTime).TotalMilliseconds);
        }
        // Do this to calcution of Action Start to Result Process
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
            DateTime startTime = (DateTime)filterContext.HttpContext.Items["StartTime"];
            System.Diagnostics.Debug.WriteLine(filterContext.HttpContext.Items["ActionName"].ToString() + "- (R)" + (DateTime.UtcNow - startTime).TotalMilliseconds);
        }
    }

2。在Global.asax中注册

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new ActionExecutionTimeAttribute());
    }
}
  1. 您必须执行如何在数据库中插入数据。

答案 1 :(得分:0)

使用来自StackOverflow制造商的MiniProfiler。非常易于使用,默认情况下会进行测量,例如执行控制器操作。