2012-01-24 33 views
0

如果我有一個實體存儲庫並調用findAll()方法,那麼我將如何在事後釋放內存?我使用$ entityManager-> clear()運行了一個小測試,但它沒有完成這項工作。在此先感謝您的幫助!如何從教義中釋放記憶?

回答

2

你需要所有記錄嗎?你可以過濾結果,所以創建的對象少。有時php的問題是,它不會讓你釋放內存,直到過程結束。

如果您需要所有記錄,您可以使用unset()來嘗試。但要注意內存不會自由,我認爲PHP的垃圾收集器在循環引用方面存在問題,我想這種引用是強大的。

類似的問題到你用一個例子: Why is PHP Doctine's free() not working?

如果是質量迭代命令行可以請你嘗試

$this->_em->detach($row[0]); 

如下所述:http://www.doctrine-project.org/blog/doctrine2-batch-processing

+0

THX應對。你能詳細說明一下你說的那個部分:「有時候php的問題是,它不會讓你釋放內存,直到進程結束」。一個過程被定義爲什麼?如果有幫助,我運行php 5.3,我認爲Doctrine能夠利用並減少循環引用的內存問題。 – blacktie24

+0

垃圾回收在5.3之前一直沒有用於循環引用,我有不同的策略來幫助減少內存分配並且更快。如果你可以使用dql風格,Docrine對象很重。對於一個http請求進程終止,它的響應和命令行進程就像控制檯上的任何其他命令一樣結束。剛剛添加了命令行腳本的可能解決方案。 – vik