可能有些时候需要记录Action的执行时间来优化系统功能,这时可以用过滤器来实现
第1个例子
using System; using System.Diagnostics; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using System.Web.Http.Controllers; using System.Web.Mvc; namespace Mall.Site { /// <summary> /// 执行耗时监测 /// </summary> public class StopwatchFilter : ActionFilterAttribute { Stopwatch wat = new Stopwatch(); Stopwatch swAsync = new Stopwatch(); public override void OnActionExecuted(ActionExecutedContext filterContext) { swAsync.Stop(); if (swAsync.ElapsedMilliseconds>0) { string msg = string.Format("页面{0},线程id={1},Action执行时间{2}毫秒", filterContext.HttpContext.Request.RawUrl, Thread.CurrentThread.ManagedThreadId, swAsync.ElapsedMilliseconds); FrameWork.log4net.LogHelper.LogInfo(msg); } } public override void OnActionExecuting(ActionExecutingContext filterContext) { swAsync.Reset(); swAsync.Start(); } public override void OnResultExecuted(ResultExecutedContext filterContext) { wat.Stop(); if (wat.ElapsedMilliseconds>0) { string msg = string.Format("页面{0},线程id={1},View执行时间{2}毫秒", filterContext.HttpContext.Request.RawUrl, Thread.CurrentThread.ManagedThreadId, wat.ElapsedMilliseconds); FrameWork.log4net.LogHelper.LogInfo(msg); } } public override void OnResultExecuting(ResultExecutingContext filterContext) { wat.Reset(); wat.Start(); } } }