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