未设置 vs. = NULL [重复]

2024-01-02

可能的重复:
使用 PHP 释放内存哪个更好:unset() 或 $var = null https://stackoverflow.com/questions/584960/whats-better-at-freeing-memory-with-php-unset-or-var-null

这个问题有点后续使用 PHP 释放内存哪个更好:unset() 或 $var = null https://stackoverflow.com/questions/584960/whats-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 示例。


仔细阅读所选答案:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未设置 vs. = NULL [重复] 的相关文章

随机推荐