基准测试返回值的Ruby操作

11

这个基准测试函数接受一个代码块作为参数并返回执行时间: http://ruby-doc.org/stdlib-1.9.3/libdoc/benchmark/rdoc/Benchmark.html

require 'benchmark'
puts Benchmark.measure { "a"*1_000_000 }

如果你想要对一个操作进行基准测试,同时获取返回值和经过的时间,该怎么做?

或者换句话说,闭包能否修改传入其中的对象?

2个回答

12

闭包可以修改其作用域内的对象,如下所示:

require 'benchmark'

a = nil
puts Benchmark.measure { a = "a" * 1_000_000 }
puts a.size

# =>   0.000000   0.000000   0.000000 (  0.004865)
# => 1000000

所以闭包对于传递给它们的内容有一个可写指针?并且假设@a和@@a是在闭包之外定义的,那么闭包也可以修改它们吗? - justingordon
@justingordon:是的,他们可以。 - Miikka
3
噫,我真希望Benchmark返回像这样的东西:[时间,结果]。然后你就可以这样做:时间,a = Benchmark.measure {...} - devth

0

使用 https://github.com/igorkasyanchuk/benchmark_methods

不再写出这样的代码:

t = Time.now
user.calculate_report
puts Time.now - t

现在你可以做:

benchmark :calculate_report # in class

只需调用你的方法即可

user.calculate_report

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接