Очистить память после обработки файла через PHPExcel

NBK

Новичок
Помогите с проблемой обрабатываю xls файлы.

PHP:
      foreach ($files as $i => $value){
        $frp = $dir."/".$files[$i];
        echo date('H:i:s') , ' Current memory 1: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
        $objReader = PHPExcel_IOFactory::createReader("Excel5");
        $objReader->setReadDataOnly(true);
        $objPHPExcel = $objReader->load($frp);
        echo date('H:i:s') , ' Current memory 2: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
        print_r($objPHPExcel);
        echo '<br>'.date('H:i:s') , ' Current memory 3: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
        # чистим память
        unset($callStartTime,$objReader,$callEndTime,$callTime,$frp,$pos,$uid);
        echo '<br>'.date('H:i:s') , ' Current memory 4: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
на выводах получаю
Код:
1й фаил
15:15:00 Current memory 1: 1.25 MB
15:15:03 Current memory 2: 45.25 MB
15:15:03 Current memory 3: 45.25 MB
15:15:04 Current memory 4: 43 MB
2й фаил
15:15:04 Current memory 1: 43 MB
15:15:04 Current memory 2: 46 MB
15:15:04 Current memory 3: 46 MB
15:15:04 Current memory 4: 45.5 MB
3й
15:15:04 Current memory 1: 45.5 MB
15:15:05 Current memory 2: 60 MB
15:15:05 Current memory 3: 60 MB
15:15:05 Current memory 4: 59.5 MB
4й
15:15:05 Current memory 1: 59.5 MB
15:15:09 Current memory 2: 92.5 MB
15:15:09 Current memory 3: 92.5 MB
15:15:09 Current memory 4: 90.25 MB
Как сделать очистку памяти до первоначального состояния в 1.25 MB ?
Для обработки одного файла памяти всегда достаточно, но если таких файлов будет много я в мемори лимит упрусь 100%
 

AnrDaemon

Продвинутый новичок
unset только удаляет ссылки на переменные. Очисткой памяти занимает сборщик мусора.
 

NBK

Новичок
Да забыл указать, вызывал
echo '<br>'.gc_collect_cycles(),'<br>';
показывал 0 и ничего не чистилось. ставил принудительно в начале цикла gc_enable() ну и в конце цикла gc_disable()
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Зачем gc_disable?…
Вызов gc_collect_cycles() после gc_disable() смысла не имеет.
Плюс gc_collect_cycles() на сколько я понимаю вызывает только сбор циклических ссылок (ссылки переменных на самих себя).
 

NBK

Новичок
Ем я так делал.
PHP:
foreach {
gc_enable();
#обработка
unset();
echo '<br>'.gc_collect_cycles(),'<br>';
gc_disable();
}
 

Активист

Активист
Команда форума
Примерно так:
PHP:
<?php
print "Current pid: " . getmypid() . "\n";

for ($i = 0; $i < 10; $i++) {

    print "Memory before fork: " . sprintf("%0.2f", memory_get_usage(true) / 1024 / 1024) . "\n";
 
    $pid = pcntl_fork();

    if ($pid == -1) {
 
        print 'Can\'t fork\n';
     
    } else if ($pid) {
     
     
        pcntl_wait($status);
     
    } else {
     
        // PHP Excel here
        print "Process PHP Excel file {$i} with proccess id " . getmypid() . "\n";
        // ...
        // ...
        $tmp = str_repeat("byte", 1024 * 1024 );
     
        // ...
        print "Memory on complate: " . sprintf("%0.2f", memory_get_usage(true)  / 1024 / 1024) . "\n";
        exit(" 100% complated");
     
     
    }
}
Код:
# php ./ex.php
Current pid: 17996
Memory before fork: 0.25
Process PHP Excel file 0 with proccess id 17997
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 1 with proccess id 17998
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 2 with proccess id 17999
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 3 with proccess id 18000
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 4 with proccess id 18001
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 5 with proccess id 18002
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 6 with proccess id 18003
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 7 with proccess id 18004
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 8 with proccess id 18005
Memory on complate: 4.50
100% complatedMemory before fork: 0.25
Process PHP Excel file 9 with proccess id 18006
Memory on complate: 4.50
 

NBK

Новичок
Во спасибо, наводка есть, дальше если где ошибка будет гугл поможет ;)
Хорошо что тут новичкам нормально помогают разобраться.
 
Сверху