Issue #8211 has been updated by marcandre (Marc-Andre Lafortune).

Status changed from Open to Closed


----------------------------------------
Bug #8211: Performance regression of method calls
https://bugs.ruby-lang.org/issues/8211#change-38236

Author: dunric (David Unric)
Status: Closed
Priority: Normal
Assignee: 
Category: core
Target version: 
ruby -v: 2.0.0p0


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       }}
}
_____________________________________________________________


-- 
http://bugs.ruby-lang.org/