#php
#php
Вопрос:
Вызывает ли это утечку памяти PHP?
function xml_parse($xmlString)
{
return json_decode(json_encode(new SimpleXMLElement($xmlString)), true);
}
Или мне нужно сбросить SimpleXML obj таким образом?
function xml_parse($xmlString)
{
$sObj = new SimpleXMLElement($xmlString);
$ret = json_decode(json_encode($sObj), true);
unset($sObj);
return $ret;
}
Я запускаю это в большом foreach, поскольку скрипту необходимо проанализировать много файлов.
Комментарии:
1. Похоже bugs.php.net/bug.php?id=62468
Ответ №1:
Если вы действительно хотите знать, запустите его пару тысяч раз и выведите использование памяти. Обычно неиспользуемые объекты будут очищены сборщиком мусора, поэтому первый фрагмент не будет «пропускать» память. Однако в PHP <5.3 существует проблема с циклическими ссылками, которая может препятствовать сбору неиспользуемых объектов. Поэтому, если у вас возникнет проблема, обновление PHP может решить ее за вас.
Комментарии:
1. Я выполнил 2 тестовых запуска, и с помощью первого метода я получил около 400 МБ, а со вторым методом — около 270 МБ. На PHP5.3.6 (MAMP)
Ответ №2:
Я не гуру uber PHP, но я бы, вероятно, пошел со вторым примером, который у вас есть, просто на всякий случай.
Ответ №3:
Это не приведет к утечке памяти. Сборщик мусора PHP увидит, что на SimpleXMLElement не осталось ссылок, и при необходимости удалит его.