std::chrono処理時間計測クラスまとめ概要プログラム開発当初から過度のパフォーマンス最適化を行うのは良くないと言われている。プログラムソースの柔軟性が失われる可能性があるし、必要無いかもしれない最適化に時間を費やすのは開発工数管理的に好ましくないからだ。処理時間計測を行い処理時間を要している箇所を探しだし、アルゴリズムやデータ構造の変更などのパフォーマンス・チューニングを行う必要がある。予備調査として、色々なアルゴリズム・データ構造を採用した場合の処理時間計測を行い、どれが最適か、どのような性質があるかを知ることも重要である。本稿では、上記のような目的のためにプログラムの処理時間を計測する方法について説明する。環境では、プログラムの処理時間を計測するための関数として、以下の様なものがある。言語から用意されている関数で、プログラム実行開始からの経過時間を返す。単位は通常ミリ秒である。精度は処理系に依存する。10ミリ秒程度のようだ。使うには「<time.h>」をインクルードする必要がある。clock();」で処理の終了時間を記録する。start」で処理時間の数値を得ることが出来る。秒に変換したい場合は、「CLOCKS_PER_SEC」で割る。上記ソースをビルド・実行(デバッグモード、リリースモード両方)してみなさい。挿入するよう修正し、ビルド・実行してみなさい。挿入するよう修正し、ビルド・実行してみなさい。for文の部分を、処理時間を計測してみたい何かに変更し、ビルド・実行してみなさい。用意されている関数で、システム起動開始からの経過時間を返す。精度は環境に依存するが、10ミリ秒程度のようだ。使うと、実際の精度をナノ秒単位で取得できる。本稿では説明しないので、興味がある人は自分で調べてね。使うには「<windows.h>」をインクルードする必要がある。GetTickCount();」で処理の終了時間を記録する。start」で処理時間の数値(単位はミリ秒)を得ることが出来る。秒に変換したい場合は、「1000」で割る。上記ソースをビルド・実行してみなさい。いうくどい名前の関数は、システム起動開始からの経過時間を返す。単位はミリ秒で、精度は1ミリ秒程度である。使うには「<windows.h>」をインクルードする必要がある。「winmm.lib」をリンクする必要がある。"winmm.lib")」と記述するとよい。timeGetTime();」で処理の終了時間を記録する。start」で処理時間の数値(単位はミリ秒)を得ることが出来る。秒に変換したい場合は、「1000」で割る。上記ソースをビルド・実行して、精度が1ミリ秒程度であることを確認しなさい。速度比較を行いなさい。実行すると、実際にはどの程度時間が経過するかを計測してみなさい。速度比較を行いなさい。あることを確認しなさい。あることを確認しなさい。あることを確認しなさい。あることを確認しなさい。処理時間がどう変化するかを調べなさい。処理時間がどう変化するかを調べなさい。データ数が多く(数万件以上)なると処理時間が膨大になり、実用に耐えないことがある。高分解能パフォーマンスカウンタが存在する場合、そのカウンタの現在の値を取得する。精度は環境に依存するが、1ミリ秒よりもかなり小さく、これまで説明した関数よりかなり精度が高い。使うには「<windows.h>」をインクルードする必要がある。処理時間計測を行いたい処理を行った後、「QueryPerformanceCounter(&end);」で処理の終了時間を記録する。カウンタの数値を参照したい場合は「start.QuadPart」のように参照する。start.QuadPart」で処理時間の数値を得ることが出来る。