用于获取增量的基准对象方法



我正在使用基准测试来计时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 服务对不同输入值的反应速度有多快,这将进入循环。我想只将增量(0.433091)保存在数组中,以便以后可以计算平均值。

Perldoc 谈到timediff

返回两个基准时间之间的差异,作为适合传递给 timestr() 的基准对象。

所以我想一定还有更多的方法,不是吗?

我想到了两种方法来获得这个数字:

  1. 使用正则表达式:

    timestr($td) =~ m/([d.]+) /;
    say $1;
    
  2. 直接访问它:

    use Data::Dumper;
    print Dumper $td;
    

    这会产生:

    $VAR1 = bless( [
                     '0.433090925216675',
                     '0.422',
                     '0',
                     0,
                     0,
                     0
                   ], 'Benchmark' );
    

    所以我可以:

    say $td->[0];
    

第一种方法似乎是简单的方法,但我不喜欢它。

第二种方法似乎非常不安全。直接访问对象数据从来都不是一个好主意。当然,必须有一个访问器方法。

你有什么建议?有谁知道这个Benchmark对象的访问器?还是我应该以不同的方式执行此操作?你会使用哪种方式?

一般来说,避免查看对象的隐私部分是正确的。

类实际上提供了一个用于获取该数字的访问器:

say $td->real;

相关内容

  • 没有找到相关文章

最新更新