<?php $offset=0; $count=10; $q=Doctrine_Query::create() ->from('sfGuardUser u'); while (1) { $q->limit($count)->offset($offset); $users=$q->execute(); if (!$users->count()) break; //Работаем с коллекцией $users //Освобождаем память. Это важно! $users->free(); unset($users); } ?>
пятница, 4 июня 2010 г.
Обрабатываем большую коллекцию по частям
Не секрет, что гидрация в объекты большого количества записей занимает много ресурсов (времени). Поэтому если вам надо вытащить Доктриной большое количество записей, и обработать их, то первый шаг к оптимизации - вытаскивать коллекцию не всю сразу, а кусочками. Примерно вот так:
Подписаться на:
Комментарии к сообщению (Atom)
Хмм и так разве работает? надо попробывать!
ОтветитьУдалитьЗабыл инкремент $offset в коде:
ОтветитьУдалить$offset += $count;