2013-06-12 19 views
11

私は、ASP.NET Web APIプロジェクトのすべてのアクション呼び出しを記録するためにActionFilterを使用しています。 OnActionExecutedメソッドは、何が起きているかをたくさん伝えます。ASP Web APIアクションのログ持続時間

私は実行時間を計測するための効率的な方法を見つける方法を見つけ出すことはできません

...任意の助け

ありがとう!トリックを行う必要があり、このような

+1

System.Diagnostics.Stopwatch? – Joe

+0

MVC APIとWeb APIの両方について[この記事](https://www.simple-talk.com/dotnet/performance/building-performance-metrics-into-asp.net-mvc-applications/)もチェックしてください。 –

答えて

28

何か...

public class StopwatchAttribute : ActionFilterAttribute 
{ 
    private const string StopwatchKey = "StopwatchFilter.Value"; 

    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     base.OnActionExecuting(actionContext); 

     actionContext.Request.Properties[StopwatchKey] = Stopwatch.StartNew(); 
    } 

    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) 
    { 
     base.OnActionExecuted(actionExecutedContext); 

     Stopwatch stopwatch = (Stopwatch)actionExecutedContext.Request.Properties[StopwatchKey]; 
     // TODO something useful with stopwatch.Elapsed 
     Trace.WriteLine("Elapsed = " + stopwatch.Elapsed); 
    } 
} 

は、ここでは、要求のプロパティで新しい Stopwatchを保存し、要求が完了したときにそれを停止します。

+0

ありがとうございましたディーン!これは完璧なソリューションです! – RooSoft

+0

なぜインスタンスにリクエストを保存しますか?なぜあなたはそれをプライベートフィールドにしませんか? – user49126

+3

@ user49126アクションフィルタは複数のアクションで共有され、複数の実行中リクエストがある可能性があります。並行性の問題を解消するには、リクエストにインスタンスを格納するのが最も安全です。 –

関連する問題