Rubyでの各メソッド実行時間測定
Rubyでの各メソッド実行時間測定方法を知らなかったのでメモ
こんなコードを書いて
$ vim test.rb arr = [:hoge,:fuga,:moge] arr.each{|i|puts i}
実行
$ ruby -r profile test.rb hoge fuga moge % cumulative self self total time seconds seconds calls ms/call ms/call name 0.00 0.00 0.00 2 0.00 0.00 IO#set_encoding 0.00 0.00 0.00 3 0.00 0.00 Symbol#to_s 0.00 0.00 0.00 6 0.00 0.00 IO#write 0.00 0.00 0.00 3 0.00 0.00 IO#puts 0.00 0.00 0.00 3 0.00 0.00 Kernel.puts 0.00 0.00 0.00 1 0.00 0.00 Array#each 0.00 0.01 0.00 1 0.00 10.00 #toplevel
それっぽいのが出てきた。
rオプションでの読み込みならばコード内でrequireでも良いのではと思い。
require 'profile' arr = [:hoge,:fuga,:moge] arr.each{|i|puts i}
実行
$ ruby test.rb hoge fuga moge % cumulative self self total time seconds seconds calls ms/call ms/call name 0.00 0.00 0.00 2 0.00 0.00 IO#set_encoding 0.00 0.00 0.00 3 0.00 0.00 Symbol#to_s 0.00 0.00 0.00 6 0.00 0.00 IO#write 0.00 0.00 0.00 3 0.00 0.00 IO#puts 0.00 0.00 0.00 3 0.00 0.00 Kernel.puts 0.00 0.00 0.00 1 0.00 0.00 Array#each 0.00 0.01 0.00 1 0.00 10.00 #toplevel
同じ結果が得られた。
詳しい説明はリファレンスマニュアルの方に
http://www.ruby-lang.org/ja/old-man/html/profile.html
またこちらの下の方に以下の補足がある。
>profileはそれ自身がオーバーヘッドになるためメソッド呼び出しあたりの処理時間がかなり遅くなります。[RAA:RbProf]というのがあり、こちらの方が速いようです