Stopwatchクラス

処理時間を計測するには、次のようにします。

Stopwatch stopwatch = Stopwatch.StartNew();

// 時間のかかる処理

stopwatch.Stop();
Console.Write( stopwatch.ElapsedMilliseconds );

プロパティ

プロパティ  
TimeSpan Elapsed 経過時間の合計
long ElapsedMilliseconds 経過時間の合計 (ミリ秒単位)
long ElapsedTicks 経過時間の合計 (タイマー刻み)
bool IsRunning trueならば、タイマーが実行中
  • true … Start()などの呼び出しで計測が開始されている
  • false … Start()などの呼び出し前か、Stop()などで計測が停止されている
Properties - Stopwatch Class (System.Diagnostics) | Microsoft Learn

Stopwatchでの時間は、高解像度のパフォーマンス カウンターがサポートされている (IsHighResolutionがtrue) ならばQueryPerformanceCounter()で、さもなくばDateTime.UtcNow.Ticksの値に基づいて計測されます。GetTimestamp - GetTimestamp

Elapsed

Elapsed - Stopwatch.cs

ElapsedTicks

ElapsedTicksプロパティが返すタイマー刻みの値は、Stopwatch.Frequencyの分解能となります。その値はハードウェアやOSに依存するため、1/10,000,000秒の分解能 (TimeSpan.TicksPerSecond) であるTimeSpanのタイマー刻みとは異なります。そのためTimeSpan.FromTicks(stopwatch.ElapsedTicks)とStopwatch.Elapsedは異なる時間となることがあります。

メソッド

メソッド 機能
StartNew() インスタンスを作成し、計測を開始する
Start() 計測を開始する
Stop() 計測を停止する
Reset() 計測を停止し、経過時間をゼロにリセットする。
Restart() 計測を停止し、経過時間をゼロにリセットする。そして計測を開始する
Methods - Stopwatch Class (System.Diagnostics) | Microsoft Learn

プロパティの値は、動作状況に応じて次のように変化します。

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()は経過時間が変化しないように計測を一時停止するだけであり、リソースを解放するようなものではありません。 Stop - Stopwatch.cs Remarks - Stopwatch.Stop Method (System.Diagnostics) | Microsoft Learn c# - Should I Stop Stopwatch at the end of the method? - Stack Overflow

Microsoft Learnから検索