我使用simpleXML来解析文件(大约341 mb)。 加载文件后,它会消耗相当数量的RAM,这是可以的。我的主要问题是在cron退出之前不会释放内存。
我假设如果我取消设置引用的xml对象,那么为内存文件保留的内存也将被释放,但事实并非如此。
是否可以释放引用文件的内存?
示例代码(不知道GC是否可以提供帮助):
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();
答案 0 :(得分:-2)
我有相当大的XML文件问题(我正在解析从循环中的另一个系统导入的许多1-5Mb XML文件)所以我转移到XMLReader并编写了像
这样的代码$reader = new XMLReader();
$reader->open("path_to_file.xml", "UTF-8", LIBXML_NOBLANKS);
/*do some parsing(probably you'll need iterate over nodes using next).
* Note that if you use XMLReader then any #text nodes even
* only containing new lines and spaces are being read
* unless you set option LIBXML_NOBLANKS
*/
$reader->close();
这至少会释放由LibXML分配的资源,并且在处理大文档时使用更少的内存。