.NET TIPS 処理時間を正確に計測するには?[2.0のみ、C#、VB]デジタルアドバンテージ 遠藤 孝信2006/02/17 |
|
|
あるコードの実行にかかる時間をプログラムで計測したい場合、.NET Framework 1.1ではDateTime構造体(System名前空間)で開始/終了の時刻を取得して算出したり、より正確に計測したい場合にはWin32APIのQueryPerformanceCounter関数*などを直接呼び出したりする必要があった。
* この関数を利用するには、ハードウェアが高分解能パフォーマンスカウンタをサポートしている必要がある。このため古いPCでは利用できない可能性もある。 |
.NET Framework 2.0のクラス・ライブラリには、このQueryPerformanceCounter関数をベースにしたStopwatchクラス(System.Diagnostics名前空間)が新しく追加されており、正確な経過時間を簡単に計測できるようになっている。
Stopwatchクラス
Stopwatchクラスで時間を計測するには、そのインスタンスを作成してStartメソッド、そしてStopメソッドを呼び出すだけだ(インスタンスの作成とStartメソッドの呼び出しをまとめて行う静的なStartNewメソッドも用意されている)。
その経過時間は、ElapsedMillisecondsプロパティ(ミリ秒単位)、Elapsedプロパティ(TimeSpan構造体の値)、もしくはElapsedTicksプロパティ(タイマ刻み回数)から得ることができる。
以下にStopwatchクラスを使用したサンプル・プログラムを示す。このプログラムでは、Threadクラス(System.Threading名前空間)のSleepメソッドにより1秒間だけスリープし、その実際の時間を計測してさまざまな形式で経過時間を出力する。
|
|
Stopwatchクラスを使用したC#のサンプル・プログラム(stopwatch.cs) | |
|
|
Stopwatchクラスを使用したVBのサンプル・プログラム(stopwatch.vb) | |
TimeSpan構造体(System名前空間)の扱いについては、「TIPS:秒数を「hh:mm:ss」形式の文字列にするには?」や「TIPS:日時や時間間隔の加減算を行うには?」を参考にしていただきたい。
ElapsedTicksプロパティによって得られる「タイマ刻み回数」とは、計測中にタイマがカウントした回数である。タイマが1秒間に何回カウントできるかは、Stopwatchクラスの静的プロパティであるFrequencyプロパティから取得できる。上記のサンプル・プログラムでは、ElapsedTicksプロパティの値を、Frequencyプロパティの値で割り算することにより、より正確な秒数を算出している。
なお、ハードウェアによりサポートされる高分解能パフォーマンスカウンタが利用可能かどうかはIsHighResolutionプロパティによりチェックできる。これが利用できない場合には、Stopwatchクラスは自動的にDateTime構造体の機能を利用して時間を計測する。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:クラス・ライブラリ 処理対象:日付と時刻 使用ライブラリ:Stopwatchクラス(System.Diagnostics名前空間) 使用ライブラリ:TimeSpan構造体(System名前空間) 使用ライブラリ:DateTime構造体(System名前空間) 関連TIPS:秒数を「hh:mm:ss」形式の文字列にするには? 関連TIPS:日時や時間間隔の加減算を行うには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|