SimpleXML加载文件消耗的可用内存

时间:2016-07-22 12:34:13

标签: php memory simplexml

我使用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();

1 个答案:

答案 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分配的资源,并且在处理大文档时使用更少的内存。