Создайте базовый контроллер и получайте от него ваши контроллеры. Установите время начала в конструкторе и переопределите Dispose () и поместите в него вычисление общего времени. Это должно дать вам сквозной на всю жизнь действия. Поскольку Controller реализует IDisposable, я предполагаю, что механизм рендеринга утилизирует его после вычисления результата, и вам не придется ждать сборки мусора. Если мое предположение окажется неверным, вы можете вместо этого использовать OnResultExecuted ().
РЕДАКТИРОВАТЬ : Получить время рендеринга на странице было бы относительно сложно, потому что по определению невозможно выполнить рендеринг страницы, пока на странице не будет указано ваше время и у вас не будет времени пока страница не закончена рендеринг. Однако вы можете записать время рендеринга в сеанс, а затем использовать AJAX, чтобы вернуться и получить время рендеринга для отображения позже. Вы можете приблизить его, указав время начала в ViewData и рассчитав время рендеринга в самом View. Возможно, вы захотите записать время рендеринга и приблизительное представление и посмотреть, насколько оно близко.
Этот код можно использовать для регистрации времени рендеринга.
public class BaseController : Controller
{
private DateTime StartTime { get; set; }
public BaseController() : base()
{
StartTime = DateTime.Now;
}
public override void Dispose( bool disposing )
{
var totalTime = DateTime.Now - this.StartTime;
... write it out somewhere ...
}
}