私は100 000行以上のテーブルを持っており、ドクトリンですべてを選択し、各行でいくつかのアクションを実行したい.ドクトリンを使用したsymfony2で、次のクエリを実行しようとしています:
$query = $this->getDefaultEntityManager()
->getRepository('AppBundle:Contractor')
->createQueryBuilder('c')
->getQuery()->iterate();
foreach ($query as $contractor) {
// doing something
}
しかし、すべてのデータをメモリに書き込んだと思うので、メモリリークが発生します。
私はそうするとき、そのライブラリでADOdbでより多くの経験を持っています:
$result = $ADOdbObject->Execute('SELECT * FROM contractors');
while ($arrRow = $result->fetchRow()) {
// do some action
}
メモリリークは発生しません。
では、テーブルからすべてのデータを選択し、symfony2 の doctrine でメモリ リークが発生しないようにするにはどうすればよいでしょうか?
質問編集
foreach を削除して繰り返し実行しようとすると、メモリ リークも発生します。
$query = $this->getDefaultEntityManager()
->getRepository('AppBundle:Contractor')
->createQueryBuilder('c')
->getQuery()->iterate();