На самом деле у меня много проблем с комбинацией symfony2 и doctrine2. Мне приходится иметь дело с огромными наборами данных (около 2-3 миллионов писем и чтений) и приложить дополнительные усилия, чтобы избежать нехватки памяти.
Я выяснил 2 основных момента, что "утечка" памяти (они на самом деле не протекают, но выделяют много)
-
Хранилище сущностей Entitymanager (я не знаю настоящего имени этого) кажется, что он сохраняет все обработанные entites, и вам нужно очистить это правило хранения с помощью
$entityManager->clear()
-
Doctrine QueryCache - он кэширует все используемые запросы, и единственная конфигурация, которую я обнаружил, заключается в том, что вы можете решить, какой тип кеша вы хотите использовать. Я не обнаружил, что глобальный запрет не содержит ни одного значащего значения для каждого запроса, чтобы отключить его. Поэтому обычно отключите его для каждого объекта запроса с помощью функции
$qb = $repository->createQueryBuilder($a); $query = $qb->getQuery(); $query->useQueryCache(false); $query->execute();
так.. вот и все, что я понял сейчас. мои вопросы:
Есть ли простой способ отклонить некоторые объекты из Entitymanagerstorage? Есть ли способ установить использование querycache в entitymanager? Могу ли я настроить такое поведение кэширования в конфигурации доктрины symonfony?
Было бы очень здорово, если бы у кого-то были хорошие советы для меня.. в противном случае это может помочь некоторым новичкам.
суа