为什么方法调用会减慢一切?

时间:2013-08-10 13:02:09

标签: php object methods slowdown

我有一个带有新对象的小循环。

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下安装新版本很难,我可能无法解决我的问题。)

谢谢:)

0 个答案:

没有答案