2017-07-05 12 views
-2

私のアプリケーションで特定の関数呼び出しがかかる時間を測定したいと思います。このために私はStopwatchクラスを使用し、それはうまく動作します。私は多くの機能を中心に、これを入力していますがCで異なる署名を持つ関数の時間計測

static readonly Stopwatch StopWatch = new Stopwatch(); 

StopWatch.Restart(); 
void func(); 
StopWatch.Stop(); 
Assert.Blabla 

:それは次のようになります。私のためにこれを行う関数を作る方法はありますか?私は試みましたが、関数のシグネチャがすべて異なっているので、私はそれを理解できません。私はFuncActionを見ましたが、固定署名が必要なようです。

CallAndMeasureFunction(func) 
+0

はい、C#は強く型付けされた言語ですが、もちろん固定の署名が必要です。 – Milney

+4

これはプロファイリングと呼ばれます。これらの統計情報を取得するには、.NETプロファイリングツールを使用します。 https://stackoverflow.com/questions/14019510/calculate-the-execution-time-of-a-method(series0ne answer) – ojf

+0

またはhttps://github.com/petabridgeのような図書館を調べてください。/NBench – Milney

答えて

1

あなたは、以下のようなものを使用することができます:

は、入力として実際のメソッドのデリゲートを受け取るメソッド定義:

public static TimeSpan GetTimestampFor(Action action) 
    { 
     TimeSpan timestamp = new TimeSpan(0); 
     Stopwatch stopWatch = new Stopwatch(); 

     if (action != null) 
     { 
      stopWatch.Start(); 
      action.Invoke(); 
      stopWatch.Stop(); 

      timestamp = stopWatch.Elapsed; 
     } 

     return timestamp; 
    } 

をし、以下のようにそれを呼び出す私はこのような何かをしたいと思います。

このコードでは、すべてのメソッドの実行時間を測定できます

+0

残念ながら、戻り値が常に無効であるとは限りませんので、Actionを使用することはできません。 – Frank

+1

上記のコードを更新しました。このコードは、戻り値の型を持つかどうかにかかわらず、あらゆる種類のメソッドに使用できます。戻り値の型がない場合は、{var xyz =と} – Sujith

関連する問題