BLOGブログ
.NET でプログラムの処理時間をストップウォッチで測る(Stopwatch クラス)
見出し
プログラムでの処理時間計測
開発をしていると処理時間が計測したくなることがまれにあります。
そんな時、デバック用のコードとして、下記のようなロジックを埋め込んで計測する思います。
- 処理の開始時に、現在時刻を取得。
- 処理の終了時に、再度現在時刻を取得。
- 上記2つの時刻の差分を算出して処理時間とする。
処理時間を取得したい箇所が複数あったら、
自分でユーティリティクラスなどを作ったりして簡単に利用可能にます。
.NET では、処理時間計測用に、Stopwatch クラス というものがあります。
本物のストップウォッチのようにスタート、ストップという
命令で操作できとてもわかり易い クラスです。
サンプル含めて解説します。
Stopwatch クラスの使い方
まず、Stopwatch を new します。
その後に、Start()メソッドを呼びます。Start()メソッド呼び出しから時間の計測が始まります。
計測を終えたい箇所で Stop()メソッドを呼びます。
Elapsedプロパティの値に計測値が入っているので、それをコンソールやデバッグ出力に出力するだけです。
また、Stopwatch クラスには気の利いた少し便利なメソッドが用意されています。
- クラスの new とStart()メソッドの呼び出しを一度に行う、StartNew()メソッド
- 経過時間を初期化する Reset()メソッド
- 経過時間を初期化して再スタートする Restart()メソッド
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
static void Main(string[] args) { // Stopwatch クラスを生成 var sw = new System.Diagnostics.Stopwatch(); sw.Start(); // 計測開始 // 時間を計りたい処理 System.Threading.Thread.Sleep(1000); // 1秒待ち sw.Stop(); // 計測終了 Console.WriteLine(sw.Elapsed); // 出力例:00:00:01.0009220 // 生成と計測開始(Startメソッド)を一度に実行 var sw2 = System.Diagnostics.Stopwatch.StartNew(); // 時間を計りたい処理 System.Threading.Thread.Sleep(2000); // 2秒待ち sw2.Stop(); // 計測終了 Console.WriteLine(sw2.Elapsed); // 出力例:00:00:02.0006336 sw2.Restart(); // 計測結果を0に戻して再計測 // 時間を計りたい処理 System.Threading.Thread.Sleep(500); // 0.5秒待ち sw2.Stop(); // 計測終了 Console.WriteLine(sw2.Elapsed); // 出力例:00:00:00.5005923 } |
.NET C# 以外の言語では
Ruby と Javascript でも同様の記述ができる命令があります。
RubyではBenchmarkモジュールで、Javascriptではconsole.time()とconsole.timeEnd() メソッドです。
あとがき
経験の浅い言語のプログラミングでは、ついつい自前のデバッグ用ユーティリティーを組んでしまいがちですよね。
そうする前に、便利なユーティリティーが用意されていないか探してみましょう。
ではでは。