メソッドの実行にかかる時間をテストしたかったのですが、timespan が最適な方法であるかどうか疑問に思っていました。メソッドの開始と終了をログに記録したくありません。既存のログ ファイルの作成と更新に時間がかかるため、ログを記録しても正確な時間を読み取れないと聞いたからです。タイムスパンが最善の方法ではない場合、これを行うための良い方法について何か提案はありますか?
質問する
1437 次
5 に答える
6
この種のことのために設計された Stopwatch クラスを使用するのが最善です。
http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
DoSomething();
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
于 2012-10-11T17:49:25.340 に答える
3
var duration = Measure(() => YourFunction(param1));
long Measure(Action action)
{
Stopwatch sw = Stopwatch.StartNew();
action();
return sw.ElapsedMilliseconds;
}
于 2012-10-11T17:52:24.540 に答える
2
Stopwatch
クラスを使用する必要があります:
public void Foo()
{
var sw = Stopwatch.StartNew();
// Do work...
var totalTime = sw.Elapsed;
}
私はよく、これを処理するためのユーティリティ メソッドを作成します。
public static void ComputeTimings(Action method, string methodName)
{
var sw = Stopwatch.StartNew();
method();
sw.Stop();
Debug.WriteLine("Method {0} took {1}", methodName, sw.Elapsed);
}
これは、次のように呼び出すことができます。
ComputeTimings(() => Foo(bar), "Foo");
これは、実際のメソッド本体を変更することなく、タイミングをコードに「注入」して、必要に応じて削除できるため便利です。
また、非常に正確なタイミングを得るには、多くの場合、メソッドを少なくとも2 回実行する必要があることに注意してください。メソッドの初回実行時は、JIT コンパイラーが原因でタイミングがずれる場合があります。必要に応じて、上記のメソッドにそれを組み込むことができます。
public static void ComputeTimings(Action method, string methodName, bool executeOnceFirst = true)
{
if (executeOnceFirst)
method();
var sw = Stopwatch.StartNew();
method();
sw.Stop();
Debug.WriteLine("Method {0} took {1}", methodName, sw.Elapsed);
}
于 2012-10-11T17:50:29.597 に答える
2
私はStopwatch
自分のコードの時間を計っていました。
var sw = new Stopwatch();
sw.Start()
//code to time here
sw.Stop();
Console.WriteLine("Time taken in milliseconds: " + sw.ElapsedMilliseconds);
ストップウォッチを使用すると、タイミングをかなり細かく調整できます。これを使用して、ネストされた実行をテストし、複数のループ反復にかかる時間を平均化しました。
複数の反復をテストするには、次のようにします。
var sw = new Stopwatch();
List<long> totalTime = new List<long>();
for (var u = 0; u < 100000; u++)
{
sw.Start();
//logic here
sw.Stop();
totalTime.Add(sw.ElapsedMilliseconds);
sw.Reset();
}
Console.WriteLine("Average time in Milliseconds: {0}", totalTime.Average());
于 2012-10-11T17:48:56.137 に答える
2
Stopwatch クラスを使用します。
于 2012-10-11T17:49:20.980 に答える