这个问题是对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 示例。