Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

duping an Identity Hash/Set is faster than creating a new one #230

Open
amomchilov opened this issue Jul 15, 2024 · 0 comments
Open

duping an Identity Hash/Set is faster than creating a new one #230

amomchilov opened this issue Jul 15, 2024 · 0 comments

Comments

@amomchilov
Copy link

It's one less allocation, too :)

YJIT off YJIT on
Set.new.compare_by_identity 2.571M 4.260M
S.dup 3.014M 4.999M
1.17x 1.17x
YJIT off YJIT on
Hash.new.compare_by_identity 5.643M 8.208M
H.dup 5.988M 9.014M
1.06x 1.09x
S = Set.new.compare_by_identity.freeze
H = Hash.new.compare_by_identity.freeze

Benchmark.ips do |x|
  x.config(time: 10)

  x.report(".new.compare_by_identity") do |times|
    i = 0
    while (i += 1) <= times
      S.dup
    end
  end
  
  x.report(".dup                    ") do |times|
    i = 0
    while (i += 1) <= times
      Set.new.compare_by_identity
    end
  end
  
  x.compare!
end

Benchmark.ips do |x|
  x.config(time: 10)
  
  x.report(".new.compare_by_identity") do |times|
    i = 0
    while (i += 1) <= times
      H.dup
    end
  end
  
  x.report(".dup                    ") do |times|
    i = 0
    while (i += 1) <= times
      Hash.new.compare_by_identity
    end
  end
  
  x.compare!
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant