class A{}
echo memory_get_usage(), "\n";
$array = [];
for($i = 0; $i++ < 1000000;)
{
$array[] = new A();
}
echo memory_get_usage(), "\n";
unset($array);
echo memory_get_usage(), "\n";
Почему освобождается не вся память, если наполнить массив объектами, а потом удалить этот массив?
Вывод в косноли:
565560
82504608
8946000
Было 565 560, удалили переменную, и стало 8 946 000, разница очень большая. Почему так? И как удалить оставшееся, если gc включен, и gc_collect_cycles()
не помогает.
unset
не удаляются полностью, для их полного "удаления/очищения" нужно использовать присвоение к null (но могу ошибаться, ибо теорию толком не помню)UPD Если создание каждый раз нового объекта не критично, вы можете передавать экземпляр класса (как обычную переменную), тогда память освободится ВСЯ.
class A{}
$a = new A();
echo memory_get_usage(), "\n";
$array = [];
for($i = 0; $i++ < 1000000;)
{
$array[] = $a;
}
echo memory_get_usage(), "\n";
foreach($array as $arr){
$arr=null;
unset($arr);
}
unset($array);
echo memory_get_usage(), "\n";
//365944 36017608 365944
Нашел старую статью про объекты и память, можно почитать на досуге - https://habr.com/ru/company/mailru/blog/255237/
С помощью данного кода открываю файл для редактирования, но файл очень большой, и не удобно искать 1 строку для редактированияКак открыть...
Как можно отсортировать ActiveRecord по полю date, что бы отсортировать от самых близких датКак в этом запросе, но неподходящие записи выводить в конец...
Иногда в csv файле у описаний полей, и/или у данных, может быть 1 лишний разделитель (в нашем случае ;)
Не являюсь знатоком РНР, но появилась нужда кое-что делать\ asterisk под управлением freepbx записывает разговоры