処理時間を計測するには、次のようにします。
Stopwatch stopwatch = Stopwatch.StartNew();
// 時間のかかる処理
stopwatch.Stop();
Console.Write( stopwatch.ElapsedMilliseconds );
型 | プロパティ | |
---|---|---|
TimeSpan | Elapsed | 経過時間の合計 |
long | ElapsedMilliseconds | 経過時間の合計 (ミリ秒単位) |
long | ElapsedTicks | 経過時間の合計 (タイマー刻み) |
bool | IsRunning | trueならば、タイマーが実行中
|
Stopwatchでの時間は、高解像度のパフォーマンス カウンターがサポートされている (IsHighResolutionがtrue) ならばQueryPerformanceCounter()で、さもなくばDateTime.UtcNow.Ticksの値に基づいて計測されます。GetTimestamp - GetTimestamp
ElapsedTicksプロパティが返すタイマー刻みの値は、Stopwatch.Frequencyの分解能となります。その値はハードウェアやOSに依存するため、1/10,000,000秒の分解能 (TimeSpan.TicksPerSecond) であるTimeSpanのタイマー刻みとは異なります。そのためTimeSpan.FromTicks(stopwatch.ElapsedTicks)とStopwatch.Elapsedは異なる時間となることがあります。
メソッド | 機能 |
---|---|
StartNew() | インスタンスを作成し、計測を開始する |
Start() | 計測を開始する |
Stop() | 計測を停止する |
Reset() | 計測を停止し、経過時間をゼロにリセットする。 |
Restart() | 計測を停止し、経過時間をゼロにリセットする。そして計測を開始する |
プロパティの値は、動作状況に応じて次のように変化します。
Stopwatch stopwatch = new Stopwatch(); Console.Write(stopwatch.ElapsedMilliseconds); // 0 Console.Write(stopwatch.IsRunning); // False stopwatch.Start(); Task.Delay(100).Wait(); Console.Write(stopwatch.ElapsedMilliseconds); // 110 Console.Write(stopwatch.IsRunning); // True stopwatch.Stop(); Task.Delay(200).Wait(); Console.Write(stopwatch.ElapsedMilliseconds); // 110 Console.Write(stopwatch.IsRunning); // False stopwatch.Restart(); Task.Delay(300).Wait(); Console.Write(stopwatch.ElapsedMilliseconds); // 310 Console.Write(stopwatch.IsRunning); // True
Stop()は経過時間が変化しないように計測を一時停止するだけであり、リソースを解放するようなものではありません。 Stop - Stopwatch.cs Remarks - Stopwatch.Stop Method (System.Diagnostics) | Microsoft Learn c# - Should I Stop Stopwatch at the end of the method? - Stack Overflow