将 ruby 的基准测试输出保存到文件



我编写了一个简短的ruby脚本来计时我的命令行实用程序的运行。我使用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只打印基准测试结果。我希望能够将它们保存到一个文件中以供进一步处理(它在一个脚本中运行了几次,所以我不想只使用终端输出-对于这么简单的东西似乎太费力气了)

这比您想象的要简单,只需在脚本的开头添加以下几行。

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

所有内容都被重定向到文件中,当然如果你需要一些输出到控制台,你必须像这样停止重定向。

$stdout = STDOUT

编辑:这里的脚本我用来测试这个

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 

相关内容

  • 没有找到相关文章

最新更新