Золотое правило
Первое, что нужно сделать, когда вы сталкиваетесь (или ожидаете столкнуться) с нехваткой памяти, это: не читайте огромное количество данных в памяти сразу, если вы собираетесь обрабатыватьих последовательно .
Примеры:
- Не извлекать большой набор результатов в память в виде массива;вместо этого извлекайте каждую строку по очереди и обрабатывайте ее перед извлечением следующих
- Не читать большие текстовые файлы в памяти (например, с
file
);вместо этого читайте по одной строке за раз
Это не всегда самая удобная вещь в PHP (массивы не обрезают ее, и есть много кода, который толькоработает с массивами), но в последних версиях, особенно после введения генераторов 1019 *, потоковые данные легче, чем когда-либо, вместо того, чтобы разбивать их на части.
Следуя этой практике, религиозно "автоматически"Забота о других вещах для вас также:
- Больше нет необходимости очищать ресурсы с большим объемом памяти, закрывая их и целенаправленно теряя все ссылки на них, потому что не будеттакие ресурсы для начала
- Больше нет необходимости сбрасывать большие переменные после того, как вы поработаете с ними, потому что таких переменных также не будет
Другие действия
- Будьте осторожны, создавая замыкания внутри циклов;это должно быть легко сделать, так как создание таких внутренних циклов является неприятным запахом кода.Вы всегда можете поднять замыкание вверх и задать ему больше параметров.
- Ожидая значительного ввода, разработайте свою программу и выберите алгоритмы соответствующим образом.Например, вы можете объединить любое количество текстовых файлов любого размера, используя постоянный объем памяти.