我正在用Benchmark计时 web 服务的执行时间。
use strict; use warnings;
use feature qw(say);
use Benchmark qw(:hireswallclock);
my $t0 = Benchmark->new;
1 for (1..10000000); # webservice request goes here
my $t1 = Benchmark->new;
my $td = timediff($t1, $t0);
say 'Code took ' . timestr($td);
这说:
代码耗时 0.433091 秒(0.42 usr + 0.00 sys = 0.42 CPU)
由于我想知道 web 服务对不同输入值的反应速度有多快,这将进入一个循环。我只想将 delta ( 0.433091
) 保存在一个数组中,以便稍后计算平均值。
Perldoc 说timediff
:
返回两个 Benchmark 时间之间的差异,作为适合传递给 timestr() 的 Benchmark 对象。
所以我在想一定有更多的方法,不是吗?
我想了两种方法来获得这个数字:
使用正则表达式:
timestr($td) =~ m/([\d\.]+) /; say $1;
直接访问它:
use Data::Dumper; print Dumper $td;
这产生:
$VAR1 = bless( [ '0.433090925216675', '0.422', '0', 0, 0, 0 ], 'Benchmark' );
所以我可以:
say $td->[0];
第一种方法似乎很简单,但我不喜欢它。
第二种方法似乎很不安全。直接访问对象数据从来都不是一个好主意。当然必须有一个访问器方法。
你有什么建议?有谁知道这个Benchmark
对象的访问器?或者我应该这样做吗?你会用哪种方式?