1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
require 'benchmark'
Benchmark.bm(30) do |bm|
x1 = Object.new
x2 = Object.new
def x1.foo; end
def x2.foo; end
5.times do
bm.report("control, monomorphic dispatch") do
x = x1
y = x1
i = 0
while i < 1_000_000
x.foo; y.foo; x.foo; y.foo; x.foo; y.foo; x.foo; y.foo; x.foo; y.foo
x, y = y, x
i += 1
end
end
bm.report("test, bimorphic dispatch") do
x = x1
y = x2
i = 0
while i < 1_000_000
x.foo; y.foo; x.foo; y.foo; x.foo; y.foo; x.foo; y.foo; x.foo; y.foo
x, y = y, x
i += 1
end
end
end
end
|