我有一个$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
前几次迭代的输出是:
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