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; тогда вы переписываете данные переменной. Вы можете освободить / сжать память быстрее, но это может украсть циклы ЦП из кода, который действительно в них нуждается, быстрее, что приведет к увеличению общего времени выполнения.
Так что, если все, что вы делаете, это память, да, это будет быстрее. Но в реальном приложении вы можете обнаружить, что оно замедляет работу.