Подтвердить что ты не робот

Php - в чем преимущество отбрасывания переменных?

Возможные дубликаты:
Что лучше для освобождения памяти с помощью PHP: unset() или $var = null

Есть ли реальная возможность отменить переменные в php?

class test {

  public function m1($a, $b)
    $c = $a + $b;
    unset($a, $b);
    return $c;
  }
}

Правда ли, что отменяющие переменные фактически не уменьшают потребление памяти во время выполнения?

4b9b3361

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