オブジェクト生成コスト
オブジェクトをいっぱいつくると重いよーみたいなこと聞いたことあるけど、実際のところどれくらいコスト違うんだろう、と気になったので調べてみた。
引数を2倍にして返すという単純な関数でベンチマーク。
use Benchmark qw(:all); sub new { bless +{} => $_[0]; } sub method { return $_[1] * 2; } sub function { return $_[0] * 2; } my $o = __PACKAGE__->new; cmpthese(1_000_000, { 'init everytime' => sub { __PACKAGE__->new->method(10) }, 'init once' => sub { $o->method(10) }, 'function' => sub { function(10); }, }); Rate init everytime init once function init everytime 500000/s -- -62% -73% init once 1298701/s 160% -- -31% function 1886792/s 277% 45% --
やはりただの関数が一番速く、毎回初期化するケースが最も遅い。その差がだいたい3-4倍ってところ。しかし、毎回初期化するケースでも秒間50万実行できてるので、perlでOOP使うなというのは早合点。
まとめ
なるべく初期化回数をおさえ、かつ大量にオブジェクトつくらないようにすればOKでしょ!