Php - в чем преимущество отбрасывания переменных?
Возможные дубликаты:
Что лучше для освобождения памяти с помощью PHP: unset() или $var = null
Есть ли реальная возможность отменить переменные в php?
class test {
public function m1($a, $b)
$c = $a + $b;
unset($a, $b);
return $c;
}
}
Правда ли, что отменяющие переменные фактически не уменьшают потребление памяти во время выполнения?
Ответы
Ответ 1
Верно ли, что отменяющие переменные фактически не уменьшает память потребление во время работы?
Да. От PHP.net:
unset() делает то, что он называет - отключить переменную. Это не приводит к немедленному освобождению памяти. РНР сборщик мусора сделает это, когда он см. припадки - по желанию, как только эти циклы процессора в любом случае не нужны, или еще до того, как scriptзаканчивается память, что бы ни происходило первый.
Если вы делаете $whatever = null; то вы переписываете переменную данные. Вы можете освободить память/ быстрее сокращается, но может красть процессор циклов из кода, который действительно нужен их раньше, в результате чего общее время выполнения.
Относительно вашего другого вопроса:
И есть ли причина для отмены переменные, кроме разрушения сессионных валебелей, например, для обзорное?
Не совсем, вы в значительной степени суммировали его.
Ответ 2
PHP будет самостоятельно очищать память с помощью сборщика мусора, и он обычно выполняет довольно хорошую работу. unsetting просто сделает его явным, что вы сделали с этой конкретной переменной.
Ответ 3
Вероятно, нет преимуществ для простых типов данных, но для любых системных ресурсов, которые вы хотите использовать для освобождения этих ресурсов.
Ответ 4
Это зависит от того, что такое переменная. Если это большой массив, который потребляет несколько мегабайт данных, а ваш script может потребовать много памяти в будущем (то есть: до того, как он завершит выполнение), было бы разумно пометить эту память как доступную для использования путем сброса массива.
Тем не менее, это действительно полезно, если массив все еще находится в области видимости, так как PHP будет эффективно автоматически удалять его в противном случае.
С точки зрения вашего предоставленного примера, нет необходимости использовать unset, так как эти переменные сразу выходят за рамки.
Ответ 5
Несмотря на то, что нет реальной выгоды по сравнению с собственной сборкой мусора PHP, я иногда буду использовать переменные unset()
, чтобы в коде было ясно, что роль var завершена и больше не будет доступна или назначена. Я, как правило, не делаю этого с атомными типами данных, но вместо этого с основными участниками в синглонах script - конфигурации, больших объектах и т.д.
Ответ 6
Он освобождает память, которая используется вашим script. См. http://ie2.php.net/memory_get_usage.
Преимущество заключается в том, что скрипты, обрабатывающие большие объемы данных, могут выходить из памяти из-за ошибок памяти, см. параметр memory_limit ini для более подробного описания.
Итак, да, это может быть полезно, но если вы не работаете с большими объемами данных, вам не нужно использовать его.
Вы также можете захотеть отключить переменную, чтобы впоследствии не использовать их значение, но в этом случае можно утверждать, что ваш код должен быть написан по-разному, чтобы это не происходило.
Ответ 7
Как указано в unset
unset() делает только то, что он говорит, - отключает переменную.
Это не приводит к немедленному освобождению памяти.
Сборщик мусора PHP сделает это, когда увидит, что подходит - по желанию,
так как эти циклы CPU не нужны в любом случае,
или еще до того, как script закончится память, что бы ни случилось раньше.
Если вы делаете $any = null;
то вы переписываете переменные данные.
Вы могли бы освободить память/сократиться быстрее,
но он может украсть циклы процессора из кода, который действительно нуждается в них раньше,
что приводит к более длительному времени выполнения.