Skip to content

Instantly share code, notes, and snippets.

@colinsurprenant
Created December 3, 2015 14:23
Show Gist options
  • Save colinsurprenant/5ce33931a0c4ef662a16 to your computer and use it in GitHub Desktop.
Save colinsurprenant/5ce33931a0c4ef662a16 to your computer and use it in GitHub Desktop.
require "thread"
require "benchmark"
COUNT = 50000000
@m1 = @m2 = @m3 = @m4 = @m5 = @m6 = @m7 = @m8 = @m9 = @m10 = @m11 = @m12 = nil
@m4 = "foo"
@m8 = "bar"
@calls = 0
def m1(i)
@calls += i
end
def m2(i)
@calls += i
end
def m3(i)
@calls += i
end
def m4(i)
@calls += i
end
def m5(i)
@calls += i
end
def m6(i)
@calls += i
end
def m7(i)
@calls += i
end
def m8(i)
@calls += i
end
def m9(i)
@calls += i
end
def m10(i)
@calls += i
end
def m11(i)
@calls += i
end
def m12(i)
@calls += i
end
ms = [method(:m4), method(:m8)]
Benchmark.bmbm(40) do |bm|
bm.report("loop do") do
@calls = 0
COUNT.times.each do
ms.each do |m|
m.call(1)
end
end
end
end
puts("calls=#{@calls}")
Benchmark.bmbm(40) do |bm|
bm.report("if") do
@calls = 0
COUNT.times.each do
m1(1) if @m1
m2(1) if @m2
m3(1) if @m3
m4(1) if @m4
m5(1) if @m5
m6(1) if @m6
m7(1) if @m7
m8(1) if @m8
m9(1) if @m9
m10(1) if @m10
m11(1) if @m11
m12(1) if @m12
end
end
end
puts("calls=#{@calls}")
Rehearsal ----------------------------------------------------------------------------
loop do 9.630000 0.170000 9.800000 ( 9.902000)
------------------------------------------------------------------- total: 9.800000sec
user system total real
loop do 8.580000 0.040000 8.620000 ( 8.716000)
calls=100000000
Rehearsal ----------------------------------------------------------------------------
if 7.300000 0.030000 7.330000 ( 7.231000)
------------------------------------------------------------------- total: 7.330000sec
user system total real
if 7.030000 0.020000 7.050000 ( 7.158000)
calls=100000000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment