7

重複の可能性:
PHP でメモリを解放するのに適しているもの: unset() または $var = null

この質問は、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 の例を使用する必要があったことに注意してください。

4

1 に答える 1

2

選択した回答をより注意深く読んでください。

$whatever = null; を実行している場合。次に、変数のデータを書き換えています。メモリの解放/縮小が速くなる可能性がありますが、実際に必要なコードから CPU サイクルをより早く盗む可能性があり、全体的な実行時間が長くなります。

だから、あなたがしているのはメモリ関連だけなら、はい、それはより速くなります。しかし、実際のアプリケーションでは、さらに遅くなることがあります。

于 2012-11-30T00:00:31.737 に答える