在Ruby中测量时间
我怎样才能测量一个方法所花费的时间和在Ruby中的方法中的单个语句。 如果你看到下面的方法,我想测量该方法花费的总时间和数据库访问和redis访问所花费的时间。 我不想在每一个陈述之前写Benchmark.measure。 ruby解释器是否给我们这样做的钩子?
def foo # code to access database # code to access redis. end
您可以使用Time
对象。 ( 时间文件 )
例如,
start = Time.now # code to time finish = Time.now diff = finish - start
diff
将以秒为单位,作为浮点数。
编辑: end
保留。
最简单的方法是:
require 'benchmark' def foo time = Benchmark.measure { code to test } puts time.real #or save it to logs end
示例输出:
2.2.3 :001 > foo 5.230000 0.020000 5.250000 ( 5.274806)
值为:CPU时间,系统时间,总时间和实际时间。
来源: ruby文档 。
使用基准testing报告
require 'benchmark' # Might be necessary. def foo Benchmark.bm(20) do |bm| # The 20 is the width of the first column in the output. bm.report("Access Database:") { # code to access database. } bm.report("Access Redis:") { # code to access redis. } end end
这将输出如下内容:
user system total real Access Database: 0.020000 0.000000 0.020000 ( 0.475375) Access Redis: 0.000000 0.000000 0.000000 ( 0.000037) <------ 20 -------> # This is where the 20 comes in. NOTE: Not shown in output.
更多信息可以在这里find。
看看ruby-prof
包,它应该有你所需要的。 它将创build与时间巨大的调用堆栈。
http://ruby-prof.rubyforge.org/
它可能太细,在这种情况下只是在Benchmark.measure
包装更大的部分可能是一个很好的路要走。
在wquist的答案精神,但更简单一点,你也可以做到这一点,如下所示:
start = Time.now # code to time Time.now - start