2012-06-13 42 views
2

我正在計算一個webservice的執行時間爲Benchmark得到增量的基準對象方法

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)

因爲我想知道的WebService如何快速反應不同的輸入值,這將進入一個循環。我想在數組中保存三角洲(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對象的訪問器?或者我應該做不同的事情?你會用哪種方式?

+1

作爲基準,不讓它進入生產代碼,我不認爲直接訪問是「非常不安全」。 –

回答

1

一般來說,你是正確的避免看對象的私人部分。

類實際上提供了一個訪問用於獲取該數字:

say $td->real; 
+0

不錯。這樣可行。謝謝。 :) – simbabque