NYTProf显示在if语句上调用DBI :: st :: fetch?

时间:2012-06-21 15:16:15

标签: performance perl dbi

我有一个奇怪的问题。用NYTProf多次分析我的代码。我有一段缓慢的代码似乎应该非常快?

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

该线需要187秒才能运行? 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?
    }
}

1 个答案:

答案 0 :(得分:3)

已知错误:

评估while条件所花费的时间可能被错误地归因于while循环的最后一个语句。