Skip to content

Instantly share code, notes, and snippets.

@kou
Created July 12, 2015 00:13
Show Gist options
  • Save kou/f7ecefadfcd663227dbd to your computer and use it in GitHub Desktop.
Save kou/f7ecefadfcd663227dbd to your computer and use it in GitHub Desktop.
HashのキーがStringとSymbolとFixnumのときのキー参照時間のベンチマーク
#!/usr/bin/env ruby
require "benchmark"
n_executes = 1_000_000
n_keys = 100
initial_key = "a" * 20
initial_key_symbol = initial_key.to_sym
initial_key_number = 1
string_key_hash = {}
symbol_key_hash = {}
number_key_hash = {}
key = initial_key
key_number = initial_key_number
n_keys.times do
string_key_hash[key] = true
symbol_key_hash[key.to_sym] = true
number_key_hash[key_number] = true
key = key.succ
key_number = key_number.succ
end
Benchmark.bmbm do |benchmark|
benchmark.report("String key") do
n_executes.times do
string_key_hash[initial_key]
end
end
benchmark.report("Symbol key") do
n_executes.times do
symbol_key_hash[initial_key_symbol]
end
end
benchmark.report("Number key") do
n_executes.times do
symbol_key_hash[initial_key_number]
end
end
end
% ruby -v benchmark-hash-computation.rb
ruby 2.1.5p273 (2014-11-13) [x86_64-linux-gnu]
Rehearsal ----------------------------------------------
String key 0.260000 0.000000 0.260000 ( 0.263096)
Symbol key 0.180000 0.000000 0.180000 ( 0.176660)
Number key 0.180000 0.000000 0.180000 ( 0.177657)
------------------------------------- total: 0.620000sec
user system total real
String key 0.260000 0.000000 0.260000 ( 0.264220)
Symbol key 0.180000 0.000000 0.180000 ( 0.180409)
Number key 0.180000 0.000000 0.180000 ( 0.178721)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment