この質問は、PHP でメモリを解放するのに優れているもの: unset() または $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 の例を使用する必要があったことに注意してください。