Project

General

Profile

Actions

Bug #8211

closed

Performance regression of method calls

Added by dunric (David Unric) over 11 years ago. Updated over 11 years ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
2.0.0p0
Backport:
[ruby-core:53950]

Description

There are significant performance regressions in the newer Ruby versions.
When compared to the last 1.9 patch build, method & lambda calls are about 3 times slower !

Benchmarking results:


Ruby 1.9.3p392
user system total real
lambda: 8.310000 0.000000 8.310000 ( 8.315247)
instance method: 5.210000 0.000000 5.210000 ( 5.219299)
class method: 5.040000 0.000000 5.040000 ( 5.037483)

Ruby 2.0.0-p0
user system total real
lambda: 25.310000 0.010000 25.320000 ( 25.339897)
instance method: 17.870000 0.000000 17.870000 ( 17.882656)
class method: 17.630000 0.010000 17.640000 ( 17.650515)

Ruby 2.1.0-dev
user system total real
lambda: 19.210000 0.000000 19.210000 ( 19.227314)
instance method: 13.930000 0.000000 13.930000 ( 13.936974)
class method: 14.000000 0.000000 14.000000 ( 14.001582)


The code:


require 'benchmark'

do_custom_stuff = lambda { 1 + 1 + 1 }

class CustomStuff
def self.do
1 + 1 + 1
end

def do
1 + 1 + 1
end
end

custom_stuff = CustomStuff.new

Benchmark.bm { |b|
MANY = 50_000_000
b.report("lambda:") { MANY.times { do_custom_stuff.call }}
b.report("instance method:") { MANY.times { custom_stuff.do }}
b.report("class method:") { MANY.times { CustomStuff.do }}
}


Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0