Добрый день! Столкнулись с очень странной проблемой.
К сожалению, куски кода привести не могу. Но постараюсь описать суть.
Может кто сталкивался с проблемой и по моей информации будет понятно что мы делаем не так.
Имеем PHP 5.2.17 with Suhosin-Patch в режиме CLI. Консольное приложение считывает из битрикса через Bitrix API определенный массив юзеров. Далее, в цикле, для каждого юзера идет запрос на получение определенных свойств.
Так вот, для каждого нового юзера время на запрос увеличивается.
Например, для юзера 1 запрос занимал 0.00002 секунды, а для юзера 10000 это уже 0.54323 секунд. Время увеличивается всегда линейно. Память, занимаемая приложением тоже растет.
Пробовали на разных ОС (FreeBSD, последняя Убунта, Винда) — везде одно и тоже. Пробовали ставить и постоянное соединение к базе и НЕ постоянное (в конфиге битрикс). Пробовали даже отключаться от БД каждые 100 итераций и подключатсья заново насильно. Переменные все чистим. Уже замучались.
Вопрос: в чем может быть причина такой деградации? Код вроде уже весь вылизан и проверен несколькими весьма хорошими программистами.
Может ли это быть из-за того, что Битрикс использует стандартный модуль PHP Mysql?
Заранее, спасибо!
upd. Добавил пример кода:
$subscriber = new Subscribers();
$arSubscriberList = $subscriber->getList();
$i = 0;
while ($i<=count($arSubscriberList)) {
$subscriber = $arSubscriber[$i];
$sql = 'SELECT NAME,LAST_NAME FROM b_user WHERE EMAIL='.subscriber['email'].';';
$resSubscriber = $DB->Query($sql);
$result[] = $resSubscriber->Fetch();
$i++
}
UPD. Проблема решена.
Кому интересно: решилось всё переписыванием наших классов на singleton.
Додумались мы до этого только после использования профайлера xhprof, а точне XH Gui.