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のくせになぜ重いんだろう?