ruby - 将 ruby​​ 的基准输出保存到文件中

标签 ruby benchmarking

我编写了一个简短的 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

编辑:这里是我用来测试这个的 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 

关于ruby - 将 ruby​​ 的基准输出保存到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15274440/

相关文章:

apache - 任何显示 Litespeed 比 Nginx 服务器更快的基准测试?

performance - apache bench 中连接、处理、等待的定义

ruby - Ruby block 的问题

ruby-on-rails - 如何结合载波有条件地显示存在验证?

ruby - 在生成的 RSS 提要中将内容编码为 CDATA

ruby - 启动 Clojure 应用程序工头的问题

c - 计时 CUDA 操作

performance - 在 dart 中使用对象作为映射键会对性能产生重大影响吗?

java - 为什么两个独立的循环比一个快?

ruby-on-rails - 如何过滤 Rails 中的对象,以便只有创建它的用户或管理员才能销毁该对象?