C#ASP.NET MVC:显示页面渲染时间

Ale*_*lex 7 c# asp.net-mvc

我想通过母版页向我的所有ASP.NET MVC页面添加一个输出,该母版页显示当前页面的渲染时间.我怎么能这样做?

wom*_*omp 10

这很棘手,因为在您可以渲染页面之前,您必须将所有ViewData添加到其中.

您可以通过编写自定义ActionFilterAttribute和覆盖OnActionExecuting来启动计时器OnActionExecuted来获取执行控制器操作所花费的总时间,并获取已用时间并将其存储到ViewData.执行ActionResult时,可能需要花费时间并将其渲染到View中.

这可能足以满足您的需求?不幸的是,为了获得Action和Result执行的总时间,你需要覆盖OnActionExecutingOnResultExecuted在你的Controller中,但是在那时为View添加信息为时已晚,因为它已经被渲染了.您可以将其记录到文件中,但请参阅此链接以获取示例.


好的,这是一个示例计时器动作过滤器.将此类作为类添加到项目中,然后您可以使用标记任何控制器方法[ActionTimer],并将经过的时间添加到名为" _ElapsedTime" 的ViewData存储桶中,您可以在视图中打印出来.

using System.Web.Mvc; 
using System.Diagnostics;

namespace MvcApplication1  {
    public class ActionTimerAttribute : ActionFilterAttribute
        {
            public ActionTimerAttribute()
            {
                // Make sure this attribute executes after every other one!
                this.Order = int.MaxValue;
            }

            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                var controller = filterContext.Controller;
                if (controller != null)
                {
                    var timer = new Stopwatch();
                    controller.ViewData["_ActionTimer"] = timer;
                    timer.Start();
                }
                base.OnActionExecuting(filterContext);
            }

            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                var controller = filterContext.Controller;
                if (controller != null)
                {
                    var timer = (Stopwatch)controller.ViewData["_ActionTimer"];
                    if (timer != null)
                    {
                        timer.Stop();
                        controller.ViewData["_ElapsedTime"] = timer.ElapsedMilliseconds;
                    }
                }
            }
        } }
Run Code Online (Sandbox Code Playgroud)

正如我之前提到的,这将不包括实际渲染时间ActionResult.如果您看一下我链接的示例,它会向您展示如何对日志文件执行此操作,并且还可以让您了解如何使用这四个操作过滤器事件.