新しいオブジェクトを含むこの小さなループがあります。
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 に新しいバージョンをインストールするのは非常に難しく、これで問題が解決しない可能性があります。)
ありがとうございました :)