Ich verwende SimpleXML zum Parsen einer Datei (ca. 341 MB). Nach dem Laden der Datei verbraucht es eine beträchtliche Menge an RAM, die in Ordnung ist. Mein Hauptproblem ist, dass der Speicher nicht freigegeben wird, bis der Cron austritt.SimpleXML Freier Speicher von Ladedatei
Ich nahm an, dass, wenn ich das referenzierte XML-Objekt aufheben würde, auch der für die In-Memory-Datei reservierte Speicher frei wäre, aber das ist nicht der Fall.
Ist es möglich, den Speicher für die referenzierte Datei freizugeben?
Beispiel-Code (weiß nicht, ob GC helfen kann):
gc_enable();
$this->xml = simplexml_load_file($filePath);
$val = $this->getValues('/SOME/PATH/HERE');
foreach($val as $a) {
$this->tags[] = (string) $a->$tagName;
}
$this->xml = null;
unset($this->xml);
gc_collect_cycles();
Gibt es einen weiteren Verweis auf einen Knoten des XML-Dokuments, den Sie nie deaktiviert haben (wodurch SimpleXML das gesamte Objekt im Speicher belässt)? Wenn nicht, könnte es sich nur um die Komplexität des PHP-Speichermanagers handeln. Es gibt ein gutes Gespräch hier: https://www.youtube.com/watch?v=sm1HUrnsxLI – IMSoP
Keine andere Referenz, das ist der ganze Code. Es ist Teil eines Konstruktors, aber die XML-Variable befindet sich nur im Bereich des Konstruktors. – Drakoumel