Rubyでライブラリのrequireにかかる時間を計測するスクリプト
## usage: ruby -s invoke.rb [-n=1000] [command] require 'benchmark' n = ($n || 1000).to_i puts "*** n=#{n}" commands = ARGV.collect {|lib| "ruby -e nil -r #{lib}" } commands.unshift("ruby -e nil") Benchmark.bm(30) do |job| commands.each do |command| title = command job.report(title) do (n/10).times do system command; system command system command; system command system command; system command system command; system command system command; system command end end end end
実行例 (MacOS X 10.6)。見れば分かるけど、ミリ秒単位はうまく計測できないようだ。
$ ruby -v ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-darwin10.2.0] $ ruby -s invoke2.rb -n=1000 erb cgi openssl yaml rexml/document *** n=1000 user system total real ruby -e nil 0.040000 0.380000 5.080000 ( 5.388027) ruby -e nil -r erb 0.050000 0.390000 7.930000 ( 8.334806) ruby -e nil -r cgi 0.040000 0.440000 15.960000 ( 16.603249) ruby -e nil -r openssl 0.050000 0.400000 18.750000 ( 19.486394) ruby -e nil -r yaml 0.060000 0.460000 30.750000 ( 31.581488) ruby -e nil -r rexml/document 0.050000 0.460000 38.750000 ( 39.970713)
opensslがかなり重いと思ってたけど、yamlやrexmlはそれよりも重いのか。yamlはextentionのくせになぜ重いんだろう?