Ruby 配列のASCIIコードを文字列に変換する「pack」と「map」のパフォーマンスを計測する

Ruby 配列のASCIIコードを文字列に変換する「pack」と「map」のパフォーマンスを計測する

Rubyで、benchmarkを使用して、配列のASCIIコードを文字列に変換する「pack」と「map」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

benchmarkを使用して、「pack」と「map」で1000万回配列のASCIIコードを文字列に変換したパフォーマンスを計測するサンプルコードとなります。

require 'benchmark'

# 繰り返し回数 1000万回
i = 10000000

arr = [97, 98, 99]

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|

  r.report '#pack' do
    i.times do
      arr.pack("c*") 
    end
  end

  r.report '#map' do
    i.times do
      arr.map {|x| x.chr}.join
    end
  end

end

実行結果

<1回目>
                 user     system      total        real
#pack        3.954000   0.000000   3.954000 (  3.955431)
#map         6.531000   0.000000   6.531000 (  6.538415)

<2回目>
                 user     system      total        real
#pack        4.000000   0.000000   4.000000 (  4.184088)
#map         7.531000   0.016000   7.547000 (  7.807174)

<3回目>
                 user     system      total        real
#pack        3.891000   0.015000   3.906000 (  4.051181)
#map         7.297000   0.063000   7.360000 (  8.077803)

当然っぽいですが、packの方がパフォーマンスは良さそうです。