From: "jonforums (Jon Forums)" Date: 2013-04-04T07:33:13+09:00 Subject: [ruby-core:53972] [ruby-trunk - Bug #8211] Performance regression of method calls Issue #8211 has been updated by jonforums (Jon Forums). =begin I can't replicate the 1.9.3 vs. 2.0.0 results on my old Win7 32-bit box. 1.9.3 was built with mingw 4.6.2, and 2.0.0 was built with mingw-w64 4.8.0 ==== ruby 1.9.3p408 (2013-04-02 revision 40056) [i386-mingw32] lambda: 11.576000 0.000000 11.576000 ( 11.580016) instance method: 7.456000 0.000000 7.456000 ( 7.460011) class method: 7.676000 0.000000 7.676000 ( 7.670011) ==== ruby 2.0.0p102 (2013-04-03 revision 40075) [i386-mingw32] lambda: 11.669000 0.000000 11.669000 ( 11.710016) instance method: 7.051000 0.000000 7.051000 ( 7.050010) class method: 6.864000 0.000000 6.864000 ( 6.880010) =end ---------------------------------------- Bug #8211: Performance regression of method calls https://bugs.ruby-lang.org/issues/8211#change-38191 Author: dunric (David Unric) Status: Open 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/