2

我有一个$dom包含 PHP DOMDocument 实例的变量。此变量正在循环中设置和取消设置。

unset($dom)但是不会释放内存:memory_get_usage(false)报告说只有大约 10MB 的 700B 被释放。memory_get_usage(true)报告之前和之后完全相同的内存使用量unset()

我尝试了以下方法:

  • unset()我检查了 $dom 的引用计数在调用: xdebug_debug_zval('dom')reports: dom: (refcount=1, is_ref=0)=class DOMDocument { }之前正好是1。

  • 我尝试了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
    
4

1 回答 1

1

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

$dom = null;
于 2012-07-28T17:28:26.813 回答