Project

General

Profile

Actions

Bug #16840

closed

Decrease in Hash#[]= performance with object keys

Added by ana06 (Ana Maria Martinez Gomez) almost 4 years ago. Updated almost 3 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:98197]

Description

I was playing around with Ruby hashing and I have discovered something strange/surprising.

The file test.rb looks like:


require 'benchmark'
$N = 100000

class Ana 
end

objects = Array.new($N) { Ana.new() }
hash = {}
puts Benchmark.measure { 100.times { objects.each { |obj| hash[obj] = true } }}

I executed test.rb with different Ruby versions and it takes longer with newer versions. There is 1.5 seconds difference between Ruby 2.5 and master. Is that expected? And if so, why? Those are the execution results:

> rbenv shell 2.5.0
> ruby -v
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
> ruby test.rb
  2.236504   0.003546   2.240050 (  2.240256)
> ruby test.rb
  2.247041   0.003680   2.250721 (  2.250860)
> ruby test.rb
  2.276305   0.000351   2.276656 (  2.276829)
>·
> rbenv shell 2.6.2
> ruby -v
ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux]
> ruby test.rb
  2.579052   0.004181   2.583233 (  2.583541)
> ruby test.rb
  2.580179   0.000000   2.580179 (  2.580362)
> ruby test.rb
  2.646516   0.000441   2.646957 (  2.647398)
>·
> rbenv shell 2.7.1
> ruby -v
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux]
> ruby test.rb
  2.915415   0.004209   2.919624 (  2.920206)
> ruby test.rb
  2.867767   0.007511   2.875278 (  2.875416)
> ruby test.rb
  2.877741   0.000410   2.878151 (  2.878431)
>·
> rbenv shell 2.8.0-dev
> ruby -v
ruby 2.8.0dev (2020-05-07T16:22:38Z master 7ded8fd29a) [x86_64-linux]
> ruby test.rb
  3.840961   0.007852   3.848813 (  3.849499)
> ruby test.rb
  3.748391   0.007833   3.756224 (  3.756520)
> ruby test.rb
  3.686487   0.001656   3.688143 (  3.688332)

Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #16837: Can we make Ruby 3.0 as fast as Ruby 2.7 with the new assertions?ClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0