Unset vs. = NULL

Возможный дубликат:
Что лучше для освобождения памяти с помощью 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, поэтому мне пришлось использовать пример microtime_float, указанный в php.net/microtime/Example # 1.

Ответ 1

Внимательно прочитайте выбранный ответ:

Если вы делаете $whatever = null; то вы переписываете переменную данные. Вы могли бы освободить память/сократить быстрее, но она может украсть CPU циклов из кода, который действительно нуждается в них раньше, в результате чего более длительное время выполнения.

Итак, если все, что вы делаете, это материал памяти, да, это будет быстрее. Но в реальном приложении вы можете обнаружить, что это замедляет работу.