2013-03-06 3 views
3

Я создаю запрос с репозиторием сущности и, похоже, имеет утечки памяти.Использование памяти памяти Symfony 2

В моем Entity класса хранилище:

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"; 

Outpout:

мем 1: +5,0805282592773
мем 2: +5,0998611450195
мем 3: +91,49528503418
мем 4: 77.939567565918

Почему память не возвращается к исходному размеру (5 МБ) после освобождения памяти? И только переход от 91 до 77.

+0

Что делать, если вы также вызываете unset ($ query)? – sroes

+0

Просто добавлено unset ($ query) рядом с другим unset: $ this-> clear (true); $ query-> getQuery() -> free (true); unset ($ query); unset ($ r); , но это то же самое: mem 4: 77.849983215332 – Seb33300

+0

И каковы результаты? – sroes

ответ

3

Doctrine кэширует определенные аспекты загруженных объектов. Используйте

$em->clear(); 

Отделить все объекты от текущего диспетчера объектов.

+0

При этом память составляет до 66 мб (мп 4) , – Seb33300

+1

Дополнительная память является результатом переменной $ r. Функция unset() не гарантирует немедленную сборку мусора, поэтому процесс сохранит эту память до тех пор, пока сборщик мусора не освободит ее или процесс не завершится. Подробнее см. Http://stackoverflow.com/questions/584960/whats-better-at-freeing-memory-with-php-unset-or-var-null. –

Смежные вопросы