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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
require 'benchmark'
class Foo
attr_accessor :a
def a2
@a
end
def initialize
@a = 1
end
def bench(bm)
bm.report "control: 10m attr_reader" do
i = 0;
while i < 100000
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
a; a; a; a; a; a; a; a; a; a;
i += 1;
end
end
bm.report "core: 10m ruby-defined attr get" do
i = 0;
while i < 100000
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
a2; a2; a2; a2; a2; a2; a2; a2; a2; a2;
i += 1;
end
end
end
end
if $0 == __FILE__
(ARGV[0] || 10).to_i.times { Benchmark.bm(40) {|bm| Foo.new.bench(bm)} }
end
|