Ruby 「delete」と「sub」と「gsub」と「slice」のパフォーマンスを計測する

Ruby 「delete」と「sub」と「gsub」と「slice」のパフォーマンスを計測する

Rubyで、benchmarkを使用して、文字列「abc」から「c」のみを除くことに限定したコードで「delete」と「sub」と「gsub」と「slice」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

benchmarkを使用して、「delete」と「sub」と「gsub」と「slice」のパフォーマンスを計測するサンプルコードとなります。

require 'benchmark'

# 繰り返し回数 100万回
i = 1000000

# 文字列を用意
s = 'abc'

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|
  r.report '#delete' do
    i.times do
      s.delete('c')
    end
  end

  r.report '#sub' do
    i.times do
      s.sub('c', '')
    end
  end

  r.report '#gsub' do
    i.times do
      s.gsub('c', '')
    end
  end

  r.report '#slice' do
    i.times do
      s.slice(0,2)
    end
  end
end

実行結果

<1回目>
                 user     system      total        real
#delete      0.219000   0.000000   0.219000 (  0.224266)
#sub         0.375000   0.000000   0.375000 (  0.383355)
#gsub        0.672000   0.000000   0.672000 (  0.685552)
#slice       0.125000   0.000000   0.125000 (  0.122571)

<2回目>
                 user     system      total        real
#delete      0.203000   0.000000   0.203000 (  0.197043)
#sub         0.500000   0.000000   0.500000 (  0.496590)
#gsub        0.890000   0.000000   0.890000 (  0.918149)
#slice       0.125000   0.000000   0.125000 (  0.124601)

<3回目>
                 user     system      total        real
#delete      0.188000   0.000000   0.188000 (  0.203741)
#sub         0.469000   0.000000   0.469000 (  0.474898)
#gsub        0.796000   0.000000   0.796000 (  0.798647)
#slice       0.172000   0.000000   0.172000 (  0.162053)

sliceが一番、文字列「abc」から「c」のみを除く場合に限り、パフォーマンスがよい結果となりました。