大量のデータをあつかう処理のために、Doctrine2にはBatch Processingがあります。このBatch Processingは、findBy() とは違って結果をメモリに溜め込まみません。foreach のループ1回ごとに結果を逐次生成するため、メモリにやさしいのです。CSV出力など全データを参照するような場合は、このBatch Processingを使うほういいです。データが増えた時にもメモリ不足を回避できるからです。 しかし、Batch Processingは自分でメモリ管理をする必要があります。Doctrineは一意マッピング(Identity Map)をしているため、一度生成されたEntityはDoctrine側で参照を持っています。そのため、下記の例の(1)のように、ループごとに EntityManager::detach() をコールして Entity を開放しな