2012-07-28 75 views
2

我有一個變量$dom,其中包含PHP的DOMDocument實例。這個變量在循環中被設置和取消設置。PHP/DOMDocument:unset()不釋放資源

unset($dom)不會釋放內存,但:memory_get_usage(false)報告說只有約10MB的700B被釋放。 memory_get_usage(true)報告unset()前後的內存使用量完全相同。

我嘗試以下:

  • 我檢查$ DOM的引用計數是恰好一個緊接之前調用unset()xdebug_debug_zval('dom')報告:DOM:(引用計數= 1,is_ref = 0)=類DOMDocument {}。

  • 我嘗試了DOMDocument PHP Memory Leak中提出的解決方案,但這是無濟於事。我想試試gc_enable() + gc_collect_cycles()。但是這也沒有幫助。

  • 我試着在unset()之前調用$dom->__destruct(),但是這會導致錯誤,因爲DOMDocument顯然沒有析構函數。

  • 在我取消設置變量之前,我遞歸地刪除了DOM中的所有節點。它沒有造成最小的區別。

  • 我嘗試設置變量之前爲空,再次使用它:$dom = null

現在我的想法......任何人有一個建議,還有什麼我可以嘗試調試或解決這個問題?

編輯:

  • PHP -v用了Suhosin貼片(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 
    
+0

嗨..我面臨同樣的問題..你找到任何解決方法嗎? – 2014-03-28 11:20:16

+0

對不起,我不記得了。我記得我沒有找到一個合適的解決方案,並以某種方式解決它。 – jerico 2014-03-28 15:32:07

+0

它與內存泄漏有關嗎? http://stackoverflow.com/questions/8379829/domdocument-php-memory-leak – 2014-03-29 13:18:49

回答

1

這應該釋放$ dom中的內存存儲。

$dom = null; 
+0

它「應該」?你有沒有測試過它? – 2012-07-28 17:39:22

+0

您是因爲我的措辭而下降嗎?是的,它會重寫內存。 – 2012-07-28 17:42:05

+0

我沒有downvote你的答案。它不起作用,也沒有降價。 (您可以檢查您的聲譽歷史來確定)。 – 2012-07-28 17:43:09