在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