Это сложно, потому что, прежде чем вы сможете отобразить страницу, вам нужно добавить все ваши ViewData.
Общее время выполнения действия контроллера можно получить, написав пользовательский ActionFilterAttribute
и переопределив OnActionExecuting
, чтобы запустить таймер, и OnActionExecuted
, чтобы получить истекшее время и сохранить его в ViewData
. Когда выполняется ActionResult, он может занять это время и отобразить его в вашем представлении.
Это может быть достаточно близко для ваших нужд? К сожалению, чтобы получить общее общее время выполнения и действия, и результата, вам нужно переопределить OnActionExecuting
и OnResultExecuted
в вашем контроллере, но в этот момент уже слишком поздно добавлять информацию в представление, так как уже были оказаны. Вы можете записать его в файл, однако, см. Эту ссылку для примера .
<ч />
Хорошо, вот пример фильтра действий таймера. Добавьте это как класс в свой проект, и затем вы можете пометить любой метод контроллера с помощью [ActionTimer]
, и это добавит затраченное время в корзину ViewData с именем "_ElapsedTime
", которую вы можете распечатать в ваших представлениях.
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;
}
}
}
} }
Как я упоминал ранее, это не будет включать время, необходимое для фактического рендеринга ActionResult
. Если вы посмотрите на пример, который я связал, он покажет вам, как вы можете сделать это с файлом журнала, а также даст представление о том, как можно использовать четыре события фильтра действий.