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


PHP/DOMDocument: unset() does not release resources

我有一个变量$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;