我有一个变量$dom
,它包含PHP的DOMDocument的一个实例。此变量正在循环中设置和取消设置。
不过,unset($dom)
不会释放内存:memory_get_usage(false)
报告称,大约10MB中只有700B被释放。CCD_ 4在CCD_ 5之前和之后报告完全相同的内存使用量。
我尝试了以下方法:
-
在调用
unset()
:xdebug_debug_zval('dom')
reports:dom:(refcount=1,is_ref=0)=class DOMDocument{}之前,我检查了$dom的引用计数是否正好为1。 -
我尝试了DOMDocumentPHP内存泄漏中提出的解决方案,但没有成功。
-
我试过
gc_enable()
+gc_collect_cycles()
。但这也于事无补。 -
我尝试在
unset()
之前调用$dom->__destruct()
,但这将导致一个错误,因为DOMDocument显然没有析构函数。 -
在取消设置变量之前,我递归地删除了DOM中的所有节点。这并没有带来丝毫的不同。
-
在重新使用之前,我尝试将变量设置为null:
$dom = null
现在我没主意了。。。有人建议我还能试着调试或解决这个问题吗?
编辑:
-
php-v使用Suhosin Patch(cli)报告5.3.10-1ubuntu3.2
-
源代码可以在这里看到:https://github.com/jerico-dev/ojs/blob/dev/plugins/generic/lucene/classes/SolrWebService.inc.php#L256
-
前几次迭代的输出是:
before object creation: 19292296 after object creation: 29849832 before unset: 30055232 after unset: 30054448 before object creation: 29849592 after object creation: 39858840 before unset: 40079920 after unset: 40079136 before object creation: 39858272 after object creation: 49923216 before unset: 50136448 after unset: 50135664
这应该会释放$dom中的内存存储。
$dom = null;