Освобождение памяти при работе с большими объемами данных

username

Новичок
Освобождение памяти при работе с большими объемами данных

Уже не первый раз сталкиваюсь с этой проблемой, но всегда поджимали сроки и не было времени искать "красивые" решения, а теперь вот решил разобраться, т.к. считаю что решение данного вопроса необходимо.

Необходимо "распарсить" объемный массив html-документов:
Я подключаю класс simple_html_dom, запускаю цикл, в каждой итерации загружаю в переменную соответствующий html-документ, режу, крамсаю, складываю в базу, стираю переменную unset()... на втором десятке сервер выдает превышение лимита памяти..
Получается, что unset() лишь освобождает переменную, но не очищает занимаемую ей память...
Я конечно могу расширить лимит памяти, но это не выход..
Гугл вывел на кучу мнений вроде "php не способен работать с памятью, пишите на C"
Может быть здесь кто то знает решение, буду очень благодарен за любой совет!
 

atv

Новичок
проблема явно в simple_html_dom, который не удаляет зацикленные объекты, а ПХП сам не умеет удалять такие объекты, до версии 5.3
 

Макс

Старожил PHPClub
Получается, что unset() лишь освобождает переменную, но не очищает занимаемую ей память...
действие unset зависит от того сколько ссылок есть на значение. Например:
PHP:
$a = 10;
$b = &$a;
unset($a);
var_dump($b);
В данном случае unset лишь удалит ссылку на значение 10, само значение 10 останется, потому что на него указывает еще одна ссылка. Если сделать unset($b) то теоретически помять задействоанная под значение 10 должна освободится. Но насколько я знаб ПХП мелкие объекты не сразу очищает (могу ошибаться)

А вообще, проблема либо в классе, который используешь, либо в том, как ты его используешь.
 

AmdY

Пью пиво
Команда форума
а может просто страница толстая попадается?

сделай либо проверку заюзаной памяти после каждой итерации, а лучше профайлинг xdebug и там найдёшь где память не чистится или резко скачет.

-~{}~ 28.11.09 19:14:

p.s. могу подбросить замечательную прогу на java. в личку.
 

Krishna

Продался Java
Может быть здесь кто то знает решение, буду очень благодарен за любой совет!
Попробуй PHP 5.3. Только, учти, что он пока слишком нестабилен по слухам.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Krishna
О, расскажи! Люблю слухи о нестабильностях.

-~{}~ 29.11.09 03:14:

AmdY
а ты читал про цикл и про падение на 2м десятке документов, или только заголовок поста?

-~{}~ 29.11.09 03:18:

atv
это точно, что 5.3 PHP научился разбирать цикличные ссылки?
щас проверю

-~{}~ 29.11.09 03:21:

да, работает ...
gc_collect_cycles();
 

AmdY

Пью пиво
Команда форума
grigori
а ты читал мой пост? возможно что из 2-х десятков один окажется уж очень большим или кривого формата, как я понял парсер болезненно относится к невалидным страницам и левым "<" ">"? или очень большим + мусор от предыдущих действий.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Krishna
опыты Sad-Spiritа с Вистой вряд-ли можно учитывать в оценке
только fisher говорит о некоторых багах, неизвестно на что влияющих в версии 5.3.1
говорить "слишком нестабилен" для username-а нельзя

AmdY
понял, но, к сожалению, ТСу это надо меньше нас
 
Сверху