取置きとstateとMooseX::Singletonベンチマークした
Singletonパターンの前に、以前覚えたstateって最適化されて速いのかなとベンチマークしてみた。
myで外側にするのとMooseX::Singletonを比較に。
MooseX::Singletonが多機能っぽい分不利かなーとは思ってた。
20倍か。
MooseX::Singletonを外して比較。
Benchmark: timing 10000000 iterations of outer, state... outer: 3 wallclock secs ( 3.69 usr + 0.01 sys = 3.70 CPU) @ 2702702.70/s (n=10000000) state: 3 wallclock secs ( 3.54 usr + 0.00 sys = 3.54 CPU) @ 2824858.76/s (n=10000000) Rate outer state outer 2702703/s -- -4% state 2824859/s 5% --
何回かやってみたが若干stateの方が速い程度。
そういえばこれPerl5.14.2だった。
Perl5.16.2にして試した。
Benchmark: timing 10000000 iterations of moose, outer, state... moose: 133 wallclock secs (132.49 usr + 0.08 sys = 132.57 CPU) @ 75431.85/s (n=10000000) outer: 6 wallclock secs ( 6.34 usr + 0.00 sys = 6.34 CPU) @ 1577287.07/s (n=10000000) state: 6 wallclock secs ( 6.31 usr + 0.00 sys = 6.31 CPU) @ 1584786.05/s (n=10000000) Rate moose outer state moose 75432/s -- -95% -95% outer 1577287/s 1991% -- -0% state 1584786/s 2001% 0% --
うーん全体的に5.14.2より遅くなった感じだろうか。
まとめ
- stateはそろそろ使い慣れていきたい
- 速度より大事なこともある。デザパタ学習とか。