Stopwatchクラスは、名前の通りストップウォッチのように時間経過を計測するクラス。 OSおよびハードウェアが対応している場合は、自動的に高分解能パフォーマンスカウンタを使用して計測を行うため、一般的にDateTime.TicksやEnvironment.TickCountなどを使った場合よりも高い精度で計測を行うことが出来る。 高分解能パフォーマンスカウンタに対応していない場合は、システムタイマを使用して計測を行う。
高分解能パフォーマンスカウンタとシステムタイマのどちらが使用されるかどうかは、IsHighResolutionプロパティで参照できる。 また、分解能はFrequencyプロパティで参照できる。
Stopwatchクラスは、Start()メソッドで時間経過の計測を開始し、Stop()メソッドで計測を終了する。 Stopwatchクラスは、Start()およびStop()する度に時間経過を累積して計上する。 そのため、計上した時間をクリアして計測しなおしたい場合はReset()メソッドを呼ぶ必要がある。
高分解能パフォーマンスカウンタが使用される場合は、内部的にQueryPerformanceFrequency()およびQueryPerformanceCounter() (いずれもWin32 API)が呼ばれる。 この時、GetTimestamp()はQueryPerformanceCounter()の結果に基づいた値となる。 システムタイマが使用される場合は、GetTimestamp()はDateTime.Tickと同値となる。
主なコンストラクタ
- Stopwatch()
- インスタンスを生成する。
主なメソッド
- void Start()
- 計測を開始する。
- void Stop()
- 計測を停止する。
- void Reset()
- 計上した経過時間をリセットする。
- void Restart()
- 計上した経過時間をリセットし、計測を再度開始する。 Reset() + Start()と同等。 (.NET Framework 4以降)
- static Stopwatch StartNew()
- Stopwatchのインスタンスを作成するのと同時に、計測を開始する。
- static long GetTimestamp()
- 現在のタイマ刻み数(タイマの持つ分解能で計測出来る時間間隔を計測した回数)を取得する。
主なプロパティ
- Frequency (static long)
- タイマの持つ分解能で計測できる1秒あたりの計測回数を表す。
- IsHighResolution (static long)
- タイマが高分解能パフォーマンスカウンタを使用している場合はtrue、システムタイマを使用している場合はfalse。
- Elapsed (TimeSpan)
- 計測を開始してから終了するまでの時間経過の累積値をTimeSpan型で表す。
- ElapsedMilliseconds (long)
- 計測を開始してから終了するまでの時間経過の累積値をミリ秒単位で表す。
- ElapsedTicks (long)
- 計測を開始してから終了するまでの時間経過の累積値をタイマ刻み数単位で表す。
主な呼び出し順序
- new Stopwatch()
- Start()
- Stop()
- Reset()
もしくは
- StartNew()
- Stop()
- Reset()
使用例
1秒スリープする前後のタイムスタンプと実際の経過時間を計測する。
同じ処理で繰り返し計測するような場合はRestartメソッドを使用するとより簡単に記述できる。