7

可能的重复:
使用 PHP 释放内存有什么好处:unset() 或 $var = null

这个问题是对What's better at free 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 示例。

4

1 回答 1

2

仔细阅读所选答案:

如果你正在做 $whatever = null; 那么你正在重写变量的数据。您可能会更快地释放/缩小内存,但它可能会更快地从真正需要它们的代码中窃取 CPU 周期,从而导致更长的整体执行时间。

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

于 2012-11-30T00:00:31.737 回答