我有一个带有新对象的小循环。
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.6ms(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.2ms(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.
*/
}
我没有想法......不要问关于unsets。如果新对象之后没有被破坏,则会产生相同的影响。
PHP版本:5.3.2-1ubuntu4.20 (这是我可以使用的唯一版本。我无法升级/更新。在Plesk下安装新版本很难,我可能无法解决我的问题。)
谢谢:)