Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

%wリテラルは微妙に遅い…?

%wリテラルは、文字列で構成された配列を作る際に便利です。
たとえばこんな具合。

%w(a b c)
#=> ["a", "b", "c"]

内部的には、要素をそれぞれ文字列化=>配列に格納
という手順を踏んでいるそうです。(現在実装元を捜索中)

比較

というわけで、比較してみます。
0x5f_ffff回文字列を出す…なんてケースを考えてみます

毎回生成

result = Benchmark.realtime do 0x5f_ffff.times { "#{%w(a b c)}" } end
#=> 16.532131

次いで外で一回生成して呼び出しした版

result = Benchmark.realtime do str = %w(a b c); 0x5f_ffff.times { "#{str}" } end
#=>14.288871

と、状況一秒半ほどの違いが出てます。
これが長い文字列だったり、入り組んだ処理だったりすると有意な違いがでてきそうな感じではあります。