1

奇妙な質問があります。NYTProf でコードを数回プロファイリングした後。非常に高速であるべきだと思われる遅いコードがありますか?

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

実行に187秒かかるラインで?if ステートメントのコードはバインド変数を使用していますが、$my_var はそれらの変数の 1 つではありません。そして、それがなぜですか?

プロファイラーは単にバグがあり、何か他のものを拾っているだけですか? このステートメントは

while($sth->fetch)

ループしますが、2 つのステートメントの間にコードがあり、そのコードは問題ありません。実際、コード内のすべての 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?
    }
}
4

1 に答える 1

3

既知のバグ:

while 条件の評価に費やされた時間は、while ループの最後のステートメントに誤って起因する可能性があります。

于 2012-06-21T15:38:08.413 に答える