複数の場所で自分のプログラムで関数を実行するのにかかった時間を計測したいと考えています。関数のラッパークラスを測定する最善の方法は何ですか?
StopWatch
を扱うと、コードがちょっと乱雑に思えるので、私はそれをラップすることにしました。
これらは私が必要なものです:戻り値:
- 機能はしてもしなくてもよい、私は機能のうちの二つのことを取得する必要があり、戻り値
- を有することができる非同期機能を受け取ることになりますそれが実行されるまでに要した秒数(秒単位)
複数のプロジェクトで使用されるため、読みやすく持続可能な解決法を見つけたいと思います。
public class TimeMeasurer
{
private readonly Stopwatch _stopWatch;
public TimeMeasurer()
{
_stopWatch = new Stopwatch();
}
public async Task<Tuple<double, TReturn>> Start<TReturn>(Func<Task<TReturn>> function)
{
try
{
_stopWatch.Start();
var val = await function();
var took = _stopWatch.Elapsed.TotalSeconds;
return Tuple.Create(took, val);
}
finally
{
_stopWatch.Stop();
_stopWatch.Reset();
}
}
public async Task<double> Start(Func<Task> function)
{
try
{
_stopWatch.Start();
await function();
var took = _stopWatch.Elapsed.TotalSeconds;
return took;
}
finally
{
_stopWatch.Stop();
_stopWatch.Reset();
}
}
}
よりよい解決策がイマイチ場合..
- は2つの機能の間でマージする方法はあります:
これは私がこれまでにやったことありますか? (1つは戻り値を含み、2つ目はvoid関数を得る)
- タプルよりも明瞭な何かを返す方法はありますか? ..私はよく見るdoesntのも作られたクラスを呼び出す
var tuple = await _timeMeasurer.Start(async() => await function(param1, param2));
EDITを:私はそれが一種の厄介
編集に対処するために見つける私はこのアイデアを放棄することを決めました。そのあまりにも乱雑です。最後に、StopWatchを使用して
を行うために必要なことに注意していいですね!それ以上の解決策があれば、私はそれらを聞きたいと思う。 – Mei