PHP / DOMDocument:unset()不释放资源

时间:2012-07-28 17:25:26

标签: php memory-leaks domdocument

我有一个包含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

  • 可以在此处看到源代码: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
    

1 个答案:

答案 0 :(得分:1)

这应该在$ dom中释放内存存储。

$dom = null;