我有一个包含PHP DOMDocument实例的变量$dom
。正在循环中设置和取消设置此变量。
unset($dom)
不会释放内存,但是:memory_get_usage(false)
报告只有大约10MB的700B被释放。 memory_get_usage(true)
报告unset()
之前和之后的内存使用量完全相同。
我尝试了以下内容:
我检查了$ dom的引用计数恰好是在调用unset()
之前的一个:xdebug_debug_zval('dom')
报告:dom:(refcount = 1,is_ref = 0)= class DOMDocument {}。
我尝试了DOMDocument PHP Memory Leak中提出的解决方案,但这无济于事。
我尝试了gc_enable()
+ gc_collect_cycles()
。但这也无济于事。
我尝试在$dom->__destruct()
之前调用unset()
,但这会导致错误,因为DOMDocument显然没有析构函数。
在取消设置变量之前,我递归删除了DOM中的所有节点。它没有什么不同。
我尝试在重新使用之前将变量设置为null:$dom = null
现在我没有想法......有人建议我还可以尝试调试或解决这个问题吗?
编辑:
php -v使用Suhosin-Patch(cli)报告5.3.10-1ubuntu3.2
前几次迭代的输出是:
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
答案 0 :(得分:1)
这应该在$ dom中释放内存存储。
$dom = null;