Ruby Benchmark
ruby 默认带的 Benchmark模块提供了测量和报告Ruby代码运行使用时间的方法。
1、用给定的表达式"a"*1_000_000构造字符串来测量时间:
在我们的机器上 (FreeBSD 3.2 on P5, 100MHz) 生成的结果:
1.166667 0.050000 1.216667 ( 0.571355)
这个报告显示我们的CPU时间,系统CPU时间,用户和系统CPU时间总数,和流逝的真正时间。时间单元是秒。
2、使用bm方法进行同样的实验:
结果是:
user system total real
1.033333 0.016667 1.016667 ( 0.492106)
1.483333 0.000000 1.483333 ( 0.694605)
1.516667 0.000000 1.516667 ( 0.711077)
3、继续前面的例子,在每行报告前放个标签:
结果是:
user system total real
for: 1.050000 0.000000 1.050000 ( 0.503462)
times: 1.533333 0.016667 1.550000 ( 0.735473)
upto: 1.500000 0.016667 1.516667 ( 0.711239)
4、一些时间的花费依赖于它执行的次数。这些差别是由内存分配和垃圾回收的花费产生的。要避 免这些差异,提供了bmbm方法。例如,排序一个浮点数组的比较方式:
结果是:
Rehearsal -----------------------------------------
sort! 11.928000 0.010000 11.938000 ( 12.756000)
sort 13.048000 0.020000 13.068000 ( 13.857000)
------------------------------- total: 25.006000sec
user system total real
sort! 12.959000 0.010000 12.969000 ( 13.793000)
sort 12.007000 0.000000 12.007000 ( 12.791000)
5、用唯一标签的连续试验的统计报告,使用benchmark方法:
结果是:
user system total real
for: 1.016667 0.016667 1.033333 ( 0.485749)
times: 1.450000 0.016667 1.466667 ( 0.681367)
upto: 1.533333 0.000000 1.533333 ( 0.722166)
>total: 4.000000 0.033333 4.033333 ( 1.889282)
>avg: 1.333333 0.011111 1.344444 ( 0.629761)
- Benchmark.realtime
require 'benchmark' COUNT = 500_000 puts "Benchmark.realtime" puts Benchmark.realtime { 1.upto(COUNT) do a = "1"; end }
- Benchmark.measure
require 'benchmark' COUNT = 500_000 puts Benchmark.measure { 1.upto(COUNT) do a = "1"; end }
原文: http://my4java.itpub.net/post/9983/66956