0

新しいオブジェクトを含むこの小さなループがあります。

for ($i = 0; $i < $ilen; $i++)
{
    $time = microtime(true);
    $row = db_row($res, $i);
    echo "(" . ($i + 1) . " / " . $ilen . ") ";
    $element = new dataStructureElement($row['code']);
    $elementT = $element->getTypeClass();
    unset($element);
    $elementT->setName($row['name']); // bad line!
    unset($elementT);
    echo number_format((microtime(true) - $time) * 1000, 1) . 'ms ';
    echo "\n";
}

「悪い行」を省略すると、次の結果が得られました。

(1/3000) 1.7ms (2/3000) 0.7ms (3/3000) 2.4ms (4/3000) 1.9ms (5/3000) 0.7ms (6/3000) 0.7ms (7/3000) 3.2ms ( 8/3000) 2.1ms (9/3000) 0.7ms (10/3000) 0.7ms (11/3000) 0.7ms (12/3000) 0.7ms (13/3000) 0.7ms ... (2995/3000) 0.6 ms (2996 / 3000) 0.5ms (2997 / 3000) 0.6ms (2998 / 3000) 0.7ms (2999 / 3000) 0.5ms (3000 / 3000) 0.5ms

しかし、そうしないと、次のようになります。

(1/3000) 1.5ms (2/3000) 0.6ms (3/3000) 6.6ms (4/3000) 2.3ms (5/3000) 1.3ms (6/3000) 1.2ms (7/3000) 3.7ms ( 8 / 3000) 2.3ms (9 / 3000) 1.4ms (10 / 3000) 1.3ms (11 / 3000) 1.3ms (12 / 3000) 1.5ms (13 / 3000) 1.2ms ... (2995 / 3000) 14.2 ms (2996 / 3000) 14.3ms (2997 / 3000) 13.8ms (2998 / 3000) 13.9ms (2999 / 3000) 14.2ms (3000 / 3000) 14.7ms

そして、それはこの悪い方法がどのように見えるかです:

public function setName($name)
{
/*
    I've deleted the usefull stuff like writing into a database 
    to track down the problem. But nothing changed in the behavior.
*/
}

私はアイデアがありません...アンセットについて尋ねないでください。新しいオブジェクトは、後で破棄されなければ同じ影響を与えます。

PHP バージョン: 5.3.2-1ubuntu4.20 (これは私が使用できる唯一のバージョンです。アップグレード/更新はできません。Plesk に新しいバージョンをインストールするのは非常に難しく、これで問題が解決しない可能性があります。)

ありがとうございました :)

4

0 に答える 0