
34
3 章 性能を測定する
3.2.3
測定できるものだけが改善できる
1
つの関数、サブシステム、タスク、テストケースを最適化するのと、プログラム全体の性能を
改善するのとはまったく異なる。テスト設定は、顧客データで実行される製品版のプログラムとさ
まざまな面で異なるので、テストで測定された性能改善が現場で同じ性能改善につながることはま
れにしかない。
1
つのタスクを高速にすることは、たとえそのタスクがプログラムのロジックの大
半を実行するとしても、プログラム全体を速くすることにつながらないかもしれない。
例えば、データベース開発者が、データベースで特殊な
select
クエリを
1,000
回実行するとき
のプロファイルを取り、そのプロファイルに基づいて最適化したとしよう。データベース全体では
なく、特別な
select
クエリを実行するときのデータベースを高速化したのだ。このスピードアッ
プが他の
select
クエリの性能を改善するかもしれないが、削除や更新のクエリ、インデックス付
けなど他のことに対しては、効果があるか予測がつかない。
3.3
プログラム実行のプロファイルを取る
プロファイラは、他のプログラムがどこで時間を費やしたかの統計を取るプログラムだ。プロ
ファイラは、各文または関数がどれだけの頻度で実行され、それぞれの関数の累積実行時間を示す
レポートを作成する。
Windows
の
Visual C++
と
Linux
の
GCC
を含めて多くのコンパイラスイートがホットスポット
発見を手伝うプロファイラを備えている。歴史的には、 ...