DOMDocument / Xpath утечка памяти во время длинного процесса командной строки - любой способ деконструировать этот класс
Я создал приложение для очистки php командной строки, которое использует XPath для анализа HTML - проблема в том, что каждый раз, когда новый экземпляр класса DOMXPath загружается в цикле, я получаю потерю памяти, примерно равную размеру загружаемого XML , Скрипт запускается и работает, медленно наращивая использование памяти, пока не достигнет предела и не выйдет.
Я пытался форсировать сборку мусора сgc_collect_cycles()
и PHP все еще не возвращает память из старых запросов Xpath. Действительно, определение класса DOMXPath, похоже, даже не включает функцию-деструктор?
Так что мой вопрос ... есть ли способ заставить мусор убирать наDOMXPath
после того как я уже извлек необходимые данные? Использование unset на экземпляре класса предсказуемо ничего не делает.
В коде нет ничего особенного, просто стандартные вещи Xpath:
//Loaded outside of loop
$this->dom = new DOMDocument();
//Inside Loop
$this->dom->loadHTML($output);
$xpath = new DOMXPath($this->dom);
$nodes = $xpath->query("//span[@class='ckass']");
//unset($this->dom) and unset($xpath) doesn't seem to have any effect
Как вы можете видеть выше, я сохранил экземпляр новогоDOMDocument
Класс за пределами цикла, хотя это, похоже, не улучшает производительность. Я даже пытался взять$xpath
экземпляр класса из цикла и загрузка DOM в Xpath напрямую с помощью__constructor
метод, потеря памяти такая же.