3

エンティティリポジトリを使用してクエリを作成していますが、メモリリークが発生しているようです。

私のエンティティリポジトリクラスでは:

echo 'mem 1 : ' . (memory_get_usage()/1024/1024) . "<br />\n";
$query = $this->createQueryBuilder('a')->select('a','b','c','...');
echo 'mem 2 : ' . (memory_get_usage()/1024/1024) . "<br />\n";
$r = $query->getQuery()->getResult();
echo 'mem 3 : ' . (memory_get_usage()/1024/1024) . "<br />\n";
$this->clear(true);
$query->getQuery()->free(true);
unset($r);
echo 'mem 4 : ' . (memory_get_usage()/1024/1024) . "<br />\n";

出力:

mem 1:5.0805282592773
mem 2:5.0998611450195
mem 3:91.49528503418
mem 4:77.939567565918

メモリを解放した後、メモリが初期サイズ(5 MB)に戻らないのはなぜですか?

そして、91から77までしか通過しません。

4

1 に答える 1

5

Doctrineは、ロードしたエンティティの特定の側面をキャッシュします。使用する

$em->clear(); 

現在のエンティティマネージャからすべてのオブジェクトを切り離します。

于 2013-03-06T16:25:48.830 に答える