|
まずは、何が原因で遅くなっているかを突き止めねばなりません。 それにはハードウェアやライブラリやOSの仕様を知るか、くせを見ぬく必要があります。 例えばTImage(Delphi2,3)はVisibleがTrueのときの描画よりFalseのときの描画の方が 圧倒的に速いという事が確認されています。 Pentiumなどでは(恐らく他でも)除算が乗算に比べて全然遅かったりするので 同じ値の除算が2回以上になる場合は一度逆数を計算してから掛け算を行った方が速いです。 また、CPUの仕様の変更などによってそれまでは高速とされてきたコーディングが 遅くなるという事もあります。 高速化のアイディアは実際にプログラムに直し、扱うデータやOSの状況で 実行速度がどう変わるのかをかを予測し、実際に測定してどのような結果が得られたかを確かめる必要があります。 例えば挿入ソートは元のデータが昇降順に並んでいるかどうかで速度が全然違います。 また、測定中に他のアプリやOSの影響などでスワップが発生するなど 自分の作ったプログラムとは無関係なところで実行速度が変化することもあります。 高速化と思っていたがアルゴリズムかコーディングレベルでミスを犯し、答えが全然違うものと なることもあるので、実行結果のチェックも行わなければなりません。 また、どこ部分が一番実行時間を食っているかという事も見極めなければなりません。 全体で10%の実行時間を閉めているところを50%の高速化したとしても 全体の実行速度は5%しか向上しないですが 全体で90%の実行時間を閉めているところを50%の高速化すると 45%の高速化となります。 時間を食うのはループの内部である事が多いですが、もちろんそうでない場合もあります。 これらをよく考慮しないと高速化がほとんど効かないという可能性があるのはもちろん かえって遅くなるという事さえあり得えます。 |