DOMDocument / Xpath vazando memória durante o longo processo de linha de comando - qualquer maneira de desconstruir essa classe
Eu criei um aplicativo de raspagem de php de linha de comando que usa XPath para analisar o HTML - o problema é toda vez que uma nova instância de classe DOMXPath é carregada em um loop Eu estou tendo uma perda de memória aproximadamente igual ao tamanho do XML que está sendo carregado. O script é executado e executado, construindo lentamente o uso de memória até atingir o limite e sai
Tentei forçar a coleta de lixo comgc_collect_cycles()
e PHP ainda não estão recuperando memória de solicitações antigas do Xpath. Na verdade, a definição da classe DOMXPath nem parece incluir uma função destruidora?
Então, minha pergunta é ... existe alguma maneira de forçar a limpeza de lixo emDOMXPath
depois de extrair os dados necessários? O uso de unset na instância da classe previsivelmente não faz nad
O código não é nada de especial, apenas coisas padrão do 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
Como você pode ver acima, mantive a instanciação de um novoDOMDocument
classe fora do loop, embora isso não pareça melhorar o desempenho. Eu até tentei tirar o$xpath
nstância da classe @ fora do loop e carregando o DOM no Xpath diretamente usando o__constructor
método, a perda de memória é a mesm