unset vs. = NULL

时间:2012-11-29 23:58:01

标签: php

  

可能重复:
  What’s better at freeing memory with PHP: unset() or $var = null

这个问题是What's better at freeing memory with PHP: unset() or $var = null

的后续问题

长话短说,我自己的基准似乎与该问题中给出的答案相矛盾。我的问题是......为什么?答案是错的还是有些东西我只是不理解?

<?php
$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    $a = 'a';
    $a = NULL;
}
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds\r\n";



$start = microtime(true);
for ($i = 0; $i < 10000000; $i++) {
    $a = 'a';
    unset($a);
}
$elapsed = microtime(true) - $start;

echo "took $elapsed seconds\r\n";
?>

看来“= null”似乎更快。

PHP 5.4结果:

  • 花了0.88389301300049秒
  • 花了2.1757180690765秒

PHP 5.3结果:

  • 花了1.7235369682312秒
  • 花了2.9490959644318秒

PHP 5.2结果:

  • 花了3.0069220066071秒
  • 花了4.7002630233765秒

PHP 5.1结果:

  • 花了2.6272349357605秒
  • 花了5.0403649806976秒

PHP 5.0和4.4的情况开始变得不同了。

5.0:

  • 花了10.038941144943秒
  • 耗时7.0874409675598秒

4.4:

  • 花了7.5352551937103秒
  • 花了6.6245851516724秒

请记住microtime(true)在PHP 4.4中不起作用,所以我不得不使用php.net/microtime / Example#1中给出的microtime_float示例。

1 个答案:

答案 0 :(得分:2)

仔细阅读所选答案:

  

如果你正在做$ whatever = null;然后你正在重写变量   数据。您可能会更快地释放/缩小内存,但它可能会窃取CPU   从真正需要它们的代码中循环出来,产生一个   更长的总执行时间。

所以,如果你所做的只是内存的东西,是的,那会更快。但是在实际的应用程序中,你可能会发现它会减慢更多的速度。

相关问题