15

ActionFilter を使用して、ASP.NET Web API プロジェクトのすべてのアクション コールをログに記録しています。OnActionExecuted メソッドは、何が起こっているかについて多くのことを伝えます。

実行時間を測定する効率的な方法を見つける方法がわかりません...

4

2 に答える 2

35

このような何かがうまくいくはずです...

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、リクエスト プロパティに new を保存し、リクエストが完了したら停止します。

于 2013-06-12T16:35:59.430 に答える