ベンチマークをとってみた
「ファイルを読み込んで、一定の処理後、表示する」という処理について、ほぼ同じコードで、ベンチマークを取ってみました。とったのは、処理が1つのPMに書かれているもの。もうひとつは、別のPMに実際の処理は書いてみたもの。
まず、ベンチマークのとり方を忘れそうなのでめも。
use Benchmark; Benchmark::timethese(10000, { '処理名1' => \&test1, '処理名2' => \&test2, }); sub test1 { ここに処理を書く } sub test2 { ここに処理を書く }
で、問題はここから。同じ処理なんだけれど、継承を使っているほうが75%ほど遅いの...。これって、聞いていたことなんだけれど(Effective Perlだっけ?)、さすがにここまで違うかあ。
今回ベンチマークを取った理由は、もちろん処理の高速化をしたかったからなんだけれど、今後どうせなら、使いまわしとかしたいので、今回は遅いけれど、継承を使用します。
それにしても、Perlで継承を多用すると遅いのでしょうか。JavaとかRubyとかだとどうなんだろう。
追記:継承を使用している処理について、適切にしていくと60%程度までに差を抑えることが出来ました。リファレンスをもっと上手く使えば50%程度にはなるかもしれません。当然、継承を使用しない方も処理を最適化すると、その差は縮まらず。う〜ん。