Что лучший способ состоит в том, чтобы сделать глубокой копией структуры данных в Perl?

Неустранимая ошибка: допустимый размер памяти из XXX байт исчерпан (пытался выделить XXX байты)

Недостаточно памяти для запуска вашего скрипта. PHP достиг предела памяти и перестает его выполнять. Эта ошибка является фатальной, сценарий останавливается. Значение предела памяти можно настроить либо в файле php.ini, либо с помощью ini_set('memory_limit', '128 M'); в скрипте (который перезапишет значение, определенное в php.ini). Цель ограничения памяти заключается в том, чтобы не допустить, чтобы один скрипт PHP собирал всю доступную память и приводил к остановке всего веб-сервера.

Первое, что нужно сделать, это свести к минимуму объем памяти, необходимый вашему сценарию , Например, если вы читаете большой файл в переменной или извлекаете много записей из базы данных и сохраняете их все в массиве, которые могут использовать много памяти. Измените свой код, чтобы вместо этого читать строки по строке или извлекать записи базы данных по одному, не сохраняя их все в памяти. Это требует немного концептуального понимания того, что происходит за кулисами, и когда данные хранятся в памяти и в других местах.

Если эта ошибка возникла, когда ваш сценарий не выполнял интенсивную работу с памятью, вы вам нужно проверить свой код, чтобы узнать, есть ли утечка памяти. Функция memory_get_usage является вашим другом.

Вопросы, относящиеся:

36
задан JasonMArcher 8 July 2015 в 04:31
поделиться

3 ответа

Clone намного быстрее, чем Storable::dclone, но последние поддержки больше типов данных.

Clone::Fast и Clone::More в значительной степени эквивалентны, если не изменяет память, меня право, но меньше функции, завершенной, чем даже Клон, и Scalar::Util::Clone поддержки еще меньше, но IIRC является самым быстрым из них всех для некоторых структур.

Относительно удобочитаемости они должны все работать то же, они являются фактически взаимозаменяемыми.

, Если бы у Вас нет потребностей реального исполнения, я просто использовал бы dclone Storable.

я не использовал бы Data::Dumper для этого просто, потому что это таким образом громоздкое и окольное. Это, вероятно, будет очень медленным также.

Если это имеет значение, если Вы когда-нибудь хотите настраиваемое клонирование тогда Data::Visitor, обеспечивает сцепляющиеся возможности, и справедливо функция завершается, глубокое клонирование является поведением по умолчанию.

18
ответ дан Tejus Prasad 27 November 2019 в 06:13
поделиться

Мое впечатление - то, что Storable::dclone() является несколько каноническим.

15
ответ дан chaos 27 November 2019 в 06:13
поделиться

Клон , вероятно, что Вы хотите для этого. По крайней мере, это - то, что весь код я видел использование.

7
ответ дан Dan 27 November 2019 в 06:13
поделиться
Другие вопросы по тегам:

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