@bysobi

Как уменьшить потребление памяти скрипта?

Имеется скрипт, который создает xml файл ос 100тыс. товаров.
С помощью функции memory_get_usage() и memory_get_peak_usage() замеряю количество съеденной памяти.
Функция, которая выгружает с базы данных продукты, съедает 200мб.
Далее идет обычный foreach, который формирует xml.
После завершения foreach, функция memory_get_peak_usage() показывает больше 1гб памяти. Слишком много...
При экспорте 45тыс. товаров, скрипт сьедает 450мб. Это нормально?

Пытался использовать array_chunk, разбивать по 10 000 тыс и использовать unset. Но потребление одинаковое.
+ смотрю в ispmanager, сколько памяти съедает - данные совпадают.
Как можно уменьшить количество потребляемой памяти? Скрипт оптимизировал максимально. Или для 100тыс. - 1гб это нормально?
  • Вопрос задан
  • 264 просмотра
Пригласить эксперта
Ответы на вопрос 4
@neol
Попробуйте XMLWriter для создания XML, если сейчас используется не он. У него довольно скромные аппетиты по памяти.
Ответ написан
Комментировать
danial72
@danial72
flutter dart.
https://habr.com/post/112474/
https://m.habr.com/post/345024/
Если кратко xml обработку вряд ли получится нормально обработать.
Строится дом дерево, если есть возможность переносите в csv и читайте построчно и построчно же обрабатывайте. Фишка в том чтобы держать в памяти только то что мы сейчас обрабатываем.
Ответ написан
Комментировать
@Yan-s
XMLWriter вам подойдет. Но. Смысл в том, чтобы не формировать документ в памяти, а сразу писать в файл. Тогда вообще никаких проблем у вас не будет.
Ответ написан
@kuftachev
Странно судить нормально или нет, если не понятно, у Вас там только ID товара или описание по 5000 знаков на 10 языках. Но думаю, что да, может быть это и нормально, так как документ в памяти займет много места, а сборщик мусора там ничего особо не уберет.

Если нужно использовать меньше памяти, то XML - это просто текст. Его можно писать как строку сразу в файл по мере чтения, если нужно просто перенести из базы в файл. Тогда не будет весь документ находится в памяти со всей структурой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы