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";
?>

Похоже, что "= ноль" быстрее.

Результаты 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 ответ

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

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

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

Другие вопросы по тегам