опять PHPExcel

dimka1c

Новичок
Всем привет!
началась борьба с памятью при работе с PHPExcel
прочитал много сообщений, у всех проблема с этим классом - жрет гаденышь память и все тут

решил попробовать разобраться, потому как при обработке двух файлов уходило памяти больше 100Мб. Довел до 50 Мб, однако суть вопроса следующая
делаем вот так:

<?php
gc_enable();
$run = memory_get_usage();
echo 'Начало скрипта = ' . $run . '<br>';

require_once 'class/PHPExcel.php';
include 'config/config.php';

$xls = new PHPExcel();
echo 'new PHPExcel= ' . memory_get_usage() . '<br>';

$xls->__destruct();
unset($xls);
var_dump(gc_collect_cycles());
echo 'destruct PHPExcel= ' . memory_get_usage() . '<br>';


результаты:

Начало скрипта = 111072
new PHPExcel= 1985440 (уже 2Мб в никуда)
int(452) destruct PHPExcel= 1962304 (после деструкта практически ничего не меняется)

Объект я так понял остается в памяти, и уходить не собирается, подскажите, как с этимбороться
 

Фанат

oncle terrible
Команда форума
gc_connect_cycles()
Но оно жрет время, так что я его наоборот отрубил

И кстати, самое лучшее средство для экономии памяти - поставить РНР7
 

dimka1c

Новичок
на php 7 тоже пробовал - еще хуже
gc_collect_cycles() - нифига, куда то уходит память, уже 2 часа бьюсь
 

AnrDaemon

Продвинутый новичок
$xls->__destruct();
unset($xls);
Вы, видимо, не в курсе, что это одно и то же. При выходе объекта за границы видимости деструктор вызывается автоматически.
А память уходит не на объект, а на саму библиотеку. Она, очевидно, не освобождает внутренние структуры данных.
 

dimka1c

Новичок
в курсе, не более. чем эксперименты
как-то не совсем понятно мне куда оное память девается,
уже тупо по прядку все элементы уничтожаю, добился с 50Мб до 6Мб, но вопрос - куда же делись 6Мб, если все переменные уничтожены?
 

AnrDaemon

Продвинутый новичок
При чём тут переменные?… И при чём тут вообще PHP?
 
Сверху