5

コマンド ライン ユーティリティの実行時間を計測するための短い Ruby スクリプトを作成しました。私はルビーのBenchmarkモジュールを次のように使用しています:

Benchmark.bm(" "*7 + CAPTION, 7, FMTSTR, ">avg:") do |bench|
  #this loops over a  couple of runs
  bench.report("Run #{run}: ") do
    begin
    Timeout::timeout(time) {
      res = `#{command}`
    }
    rescue Timeout::Error
    end
  end
end

タイムアウトの使用はおそらく少し粗雑ですが、私のニーズには問題ないはずです。問題はBenchmark.bm、ベンチマーク結果を出力するだけです。それらをさらに処理するためにファイルに保存できるようにしたいと思います(単一のスクリプトで数回実行されるため、端末出力を消費したくありません-この単純なものには手間がかかりすぎるようです)

4

1 に答える 1

5

思ったより簡単です。スクリプトの先頭に次の行を追加するだけです。

$stdout = File.new('benchmark.log', 'w')
$stdout.sync = true

そして、すべてがファイルにリダイレクトされます。もちろん、コンソールへの出力が必要な場合は、このようにリダイレクトを停止する必要があります。

$stdout = STDOUT

編集:ここで私がこれをテストするために使用したscipt

require 'benchmark' 

$stdout = File.new('console.out', 'w')
$stdout.sync = true

array = (1..100000).to_a 
hash = Hash[*array]

Benchmark.bm(15) do |x| 
  x.report("Array.include?") { 1000.times { array.include?(50000) } } 
  x.report("Hash.include?")  { 1000.times { hash.include?(50000) } } 
end 
于 2013-03-07T15:37:22.087 に答える