PHP/DOMDocument: unset() does not release resources

蓝咒 提交于 2019-12-23 23:53:29

问题


I've got a variable $dom that contains an instance of PHP's DOMDocument. This variable is being set and unset within a loop.

unset($dom) will not release memory, though: memory_get_usage(false) reports that only 700B of about 10MB got released. memory_get_usage(true) reports the exact same amount of memory usage before and after unset().

I tried the following:

  • I checked that the reference count of $dom is exactly one immediately before the call to unset(): xdebug_debug_zval('dom') reports: dom: (refcount=1, is_ref=0)=class DOMDocument { }.

  • I tried the solution proposed in DOMDocument PHP Memory Leak but this was to no avail.

  • I tried gc_enable() + gc_collect_cycles(). But this did not help either.

  • I tried calling $dom->__destruct() before unset() but this will result in an error as DOMDocument apparently does not have a destructor.

  • I recursively removed all nodes in the DOM before I unset the variable. It did not make the least difference.

  • I tried setting the variable to null before re-using it: $dom = null

Now I'm out of ideas... Anybody got a suggestion what else I could try to debug or solve this problem?

Edit:

  • php -v reports 5.3.10-1ubuntu3.2 with Suhosin-Patch (cli)

  • The source code can be seen here: https://github.com/jerico-dev/ojs/blob/dev/plugins/generic/lucene/classes/SolrWebService.inc.php#L256

  • The output of the first few iterations is:

    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:


This should release the memory store in $dom.

$dom = null;


来源:https://stackoverflow.com/questions/11703164/php-domdocument-unset-does-not-release-resources

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!