Позволенная емкость памяти 33 554 432 байтов исчерпала (пытался выделить 43 148 176 байтов) в php

Мой грязный секрет: мне все равно, что говорят люди, и я это делаю. .NET Framework распространяется с помощью «XxxxCollection» (UIElementCollection для примера моей главы).

Итак, что мешает мне говорить:

team.Players.ByName("Nicolas")

Когда я нахожу это лучше, чем

team.ByName("Nicolas")

Кроме того, мой PlayerCollection может использоваться другим классом, например «Club», без дублирования кода.

club.Players.ByName("Nicolas")

Лучшие практики вчерашнего дня, возможно, не будут завтра , Нет оснований для большинства лучших практик, большинство из них являются лишь широким соглашением между сообществом. Вместо того, чтобы спрашивать сообщество, если он обвинит вас, когда вы это спросите, что более читаемо и поддерживается?

team.Players.ByName("Nicolas") 

или

team.ByName("Nicolas")

Действительно. У вас есть какие-то сомнения? Теперь, возможно, вам нужно играть с другими техническими ограничениями, которые не позволяют использовать List & lt; T> в вашем реальном прецеденте. Но не добавляйте ограничение, которое не должно существовать. Если Microsoft не документировала причину, то это, безусловно, «лучшая практика», идущая из ниоткуда.

270
задан Damjan Pavlica 5 July 2016 в 23:36
поделиться

5 ответов

Наконец я нашел ответ:

Просто добавляют это ниже строки к перед строкой Вас получающий ошибку в Вашем файле

ini_set('memory_limit', '-1');

, Это возьмет неограниченное использование памяти сервера, это хорошо работает.

спасибо за предоставление друзей предложения.

304
ответ дан Community 23 November 2019 в 02:18
поделиться

При попытке считать файл, который поднимет память в PHP. Например, при попытке открыть и считать файл MP3 (как, скажем, $data = файл (" http://mydomain.com/path/sample.mp3 ") это собирается вытянуть все это в память.

, Поскольку Nelson предлагает, можно работать для увеличения максимального предела памяти, если на самом деле необходимо использовать это много памяти.

2
ответ дан Beau Simensen 23 November 2019 в 02:18
поделиться

Если Вы хотите считать большие файлы, необходимо считать их поразрядно вместо того, чтобы читать их сразу.
простая математика It’s: при чтении файла 1 МБ шириной сразу, чем по крайней мере 1 МБ памяти необходим одновременно для содержания данных.

, Таким образом, необходимо считать их поразрядно использование fopen & fread.

13
ответ дан Gumbo 23 November 2019 в 02:18
поделиться

Это, к сожалению, легко к программе в PHP способом, который использует память быстрее, чем Вы понимаете. Копирование строк, массивов и объектов вместо того, чтобы использовать ссылки сделает это, хотя PHP 5, как предполагается, делает это более автоматически, чем в PHP 4. Но контакт с Вашим набором данных полностью по нескольким шагам также расточителен по сравнению с обработкой самой маленькой логической единицы за один раз. Классический пример работает с большими наборами результатов от базы данных: большинство программистов выбирает весь набор результатов в массив и затем цикл по нему один или несколько раз с foreach(). Это - намного больше памяти, эффективной для использования while() цикл, чтобы выбрать и обработать одну строку за один раз. То же самое относится к обработке файла.

17
ответ дан staticsan 23 November 2019 в 02:18
поделиться

Ваш сценарий использует слишком много памяти. Это может часто происходить в PHP, если у Вас есть цикл, который вышел из-под контроля, и Вы создаете объекты или добавляете к массивам на каждой передаче цикла.

Проверка на бесконечные циклы.

, Если это не проблема, попытайтесь выручить PHP путем уничтожения объектов, что Вы закончены с путем установки их в NULL. например, $OldVar = null;

Проверка код, где ошибка на самом деле происходит также. Вы ожидали бы что строка выделять серьезный объем памяти? В противном случае попытайтесь выяснить то, что пошло не так, как надо...

44
ответ дан Rik Heywood 23 November 2019 в 02:18
поделиться
Другие вопросы по тегам:

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