Ruby Performance Benchmarking

Posted by Raymond Law Thu, 10 Jul 2008 00:55:00 GMT

Courtesy of igvita.com

require 'benchmark'

n = 1000000
Benchmark.bm do |x|
  x.report('copy') { n.times do ; h = {}; h = h.merge({1 => 2}); end }

  x.report('no copy') { n.times do ; h = {}; h.merge!({1 => 2}); end }

  x.report('map(&:id)') do
    n.times do |i|
      h = {}
      h.map(&:object_id)
    end
  end

  x.report('map { |i| i.id }') do
    n.times do |i|
      h = {}
      h.map { |e| e.object_id }
    end
  end
end

In Rails script/console or Ruby 1.9:

>> load '/Users/rlaw/Desktop/bm.rb'
      user     system      total        real
copy  4.000000   0.020000   4.020000 (  4.081549)
no copy  2.780000   0.010000   2.790000 (  2.818923)
map(&:id) 10.880000   0.040000  10.920000 ( 11.094024)
map { |i| i.id }  2.060000   0.020000   2.080000 (  2.178544)
=> []