Вопрос памяти PHP нужно сбросить? - PullRequest
3 голосов
/ 13 мая 2011

Что произойдет, если вы не сбросите массив до завершения выполнения скрипта?

Я просматриваю тысячи CSV-файлов, анализируя данные сотен тысяч клиентов в массивы. Он работает хорошо в течение первых 5/6 часов, затем начинает плохо тратить.

Я запускаю около 5-10 CSV за выполнение ... Мне интересно, поможет ли это сбросу массивов в сценарии или нет ... Я думал, что они будут нераспределены после завершения сценария. Я не прав?

Ответы [ 5 ]

1 голос
/ 13 мая 2011

Вся память очищается, когда скрипт заканчивается.Вы пробовали использовать memory_get_peak_usage() и memory_get_usage()?Они могут быть полезны для поиска проблем с выделением памяти.

1 голос
/ 13 мая 2011

Насколько я знаю, массивы - как и вся память - должны умереть, когда скрипт делает.

Ваш PHP-скрипт вызывается другим PHP-скриптом? Если вы делаете это с помощью «include», это, по сути, берет ваш PHP-скрипт «более низкого уровня» и подключает его к высокоуровневому сценарию - что заставит их сохраняться.

0 голосов
/ 13 мая 2011

Unset просто уничтожает переменную - она ​​не освобождает память.Если такое поведение происходит после нескольких часов выполнения, и это одноразовый сценарий, возможно, разбейте файлы CSV на более мелкие блоки, чтобы ускорить процесс и помочь выяснить, где проблема начинает возникать.

0 голосов
/ 13 мая 2011

Я думаю, это зависит от того, какую версию PHP вы используете. PHP 5.3 имеет улучшенный механизм сборки мусора, который должен предотвращать такую ​​утечку памяти. На этой странице (http://www.php.net/manual/en/features.gc.performance-considerations.php) описана проблема в версиях, предшествующих 5.3, но предлагается, чтобы вы могли вручную запускать сборку мусора с помощью функции gc_collect_cycles() (если я правильно ее прочитал).

0 голосов
/ 13 мая 2011

Вся использованная память должна быть очищена после успешного завершения скрипта. Если нет, то это ошибка в PHP. здесь не помогут неиспользуемые массивы.

...