2012-06-21 20 views
1

我有一個奇怪的問題。在用NYTProf分析我的代碼幾次之後。我有一段緩慢的代碼,看起來應該是非常快的?NYTProf顯示在if語句上調用DBI :: st :: fetch?

if($my_var){ 
# spent 112s making 25764253 calls to DBI::st::fetch, avg 4µs/call 

用這條線走187sec跑? if語句中的代碼確實使用綁定變量,但是$ my_var不是其中的一個。即使這是爲什麼?

pro-filer只是越野車和挑選別的東西嗎?這個語句是在

while($sth->fetch) 

循環中,但是在這兩個語句之間有一些代碼,並且代碼很好。實際上,如果代碼中的所有if語句看起來不合理地緩慢?

只是尋找任何幫助,我可以得到。我不能發佈整個代碼。但一些僞代碼波紋管:

use DBI; 
my $dbh = <new mysql connection>; 
my $sth = $dbh->prepare('SELECT A, B, C FROM D'); 
$sth->execute(); 
$sth->bind_columns(\my($a,$b,$c)); 
while($sth->fetch){ 
    #do some fun stuff here. 
    my $d = $hash_lookup{$c} // 0; 
    if($d){ 
     #do some more fun stuff here. This is where DBI::st::fetch is apparently being called? 
    } 
} 

回答

3

已知的bug:

花費的時間評估條件,同時可對錯誤歸因while循環的最後一條語句。

+0

我最後的陳述其實不是if語句嗎? – Smartelf

+2

@Smartelf它可能適用於最後執行的語句,而不是句法上的最後一個語句。 – Schwern