読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

ハッシュ関数の性能を測ってみた

Rubyで使えるハッシュ関数の性能を測ってみた。

  • Rubyのメッセージダイジェストライブラリで使えるハッシュ関数+String#hashの処理時間を計測
  • 各処理を10000回実行して合計処理時間を出す。

結果は以下。

ハッシュ関数 所要時間(秒)
sha1 0.913
sha256 1.572
sha384 3.039
sha512 3.024
md5 0.86
rmd160 1.1
hash 0.797
(何も実行しない:比較用) 0.692
  • sha2系はやはり重い。
  • sha1,md5,hashはほぼ同じで高速。

計測環境は以下。

計測に使用したスクリプトは次の通り。

require 'digest/sha1'
require 'digest/sha2'
require 'digest/md5'
require 'digest/rmd160'

# blockを10回実行した場合の時間を計る。
def time(name, &block)
  start = Time.now
  10000.times {|i|
    block.call("a"*i)
  }
  puts "#{name} : #{(Time.now-start).to_s}"
end

# sha1
time( "sha1" ) {|str| Digest::SHA1.digest(str) }

# sha256
time( "sha256" ) {|str| Digest::SHA256.digest(str) }

# sha384
time( "sha384" ) {|str| Digest::SHA384.digest(str) }

# sha512
time( "sha512" ) {|str| Digest::SHA512.digest(str) }

# md5
time( "md5" ) {|str| Digest::MD5.digest(str) }

# rmd160
time( "rmd160" ) {|str| Digest::RMD160.digest(str) }

# hash
time( "hash" ) {|str| str.hash }

# empty
time( "empty" ) {|str|  }