Здравствуйте, появилась задача написать парсер который будет очень долго работать. И работать он будет с массивами объектов добавляя и удаляя их.
Так вот, обнаружил я что в разное время он падает от пересжирания памяти, и решил я изучить вопрос.
Написал тестовый код, который сказал мне что я не разбираюсь в php.
<?php
$start = 0;
$start = memory_get_usage();
print 'start script:'.number_format(memory_get_usage()-$start)."\r\n";
class A{}
print 'declare class:'.number_format(memory_get_usage()-$start)."\r\n";
$arrayTest = [];
print 'create array:'.number_format(memory_get_usage()-$start)."\r\n";
for($i=0;$i<100000;$i++)
{
$arrayTest[] = new A;
}
print 'insert Object to array:'.number_format(memory_get_usage()-$start)."\r\n";
for($i=0;$i<100000;$i++)
{
unset($arrayTest[$i]);
}
print 'usnet elements of array:'.number_format(memory_get_usage()-$start)."\r\n";
unset($arrayTest);
print 'usnet array:'.number_format(memory_get_usage()-$start)."\r\n";
Вроде всё достаточно наглядно. память выделили, освободили. Всё должно прийти в ноль.
Но результат вышел совсем не такой какой я себе ожидал.
start script:0
declare class:88
create array:224
insert Object to array:15,086,176
usnet elements of array:4,686,136
usnet array:4,161,704
Изначально я подумал что проблема в работе с массивом. Но заменив объект на число результат такой
start script:0
create array:224
insert integer to array:8,524,656
usnet elements of array:524,600
usnet array:168
Кто знает как с этим бороться?