Реклама на сайте Advertise with us

PHP - уничтожение массивов вручную и экономия

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

📈sflash.biz

С нами с 03.11.12
Сообщения: 3913
Рейтинг: 4447


Передовик Master-X (16.04.2018) Передовик Master-X (16.07.2018) Передовик Master-X (16.12.2022) Передовик Master-X (01.01.2023)
Ссылка на сообщениеДобавлено: 14/12/14 в 19:05       Ответить с цитатойцитата 

Кто разбирается реально в php, а не только в его синтаксисе, подскажите, в каких случаях есть реальная польза от удаления массива вручную, например, unset-ом? Освобождается ли память от массивов после завершения скрипта или желательно делать unset в конце?

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 19:13       Ответить с цитатойцитата 

9
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 14/12/14 в 19:41       Ответить с цитатойцитата 

После заверщения скрипта, память всегда очищается, так как все что связано со скриптом убивается.

Но если внутри скрипта у тебя куча временных больших массивов, то советую делать
Код:

$a ... тут массив создан и стал большим

//чистим память
$a = array();
unset($a);


Из за кучи изменений между пхп версиями, unset не всегда чистит память.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

8
 
+ +
WP-Master

С нами с 17.01.13
Сообщения: 1922
Рейтинг: 1123


Передовик Master-X (16.02.2015) Передовик Master-X (01.03.2015)
Ссылка на сообщениеДобавлено: 14/12/14 в 21:12       Ответить с цитатойцитата 

Stek: trollface.png в сухосине работает.

-1
 



С нами с 17.08.11
Сообщения: 61
Рейтинг: 62

Ссылка на сообщениеДобавлено: 14/12/14 в 21:13       Ответить с цитатойцитата 

PHP автоматически очищает память от переменных и объектов по завершении контекста, в котором они находятся. Так, глобальные переменные очищаются при завершении выполнения сценария скрипта, локальные — при завершении выполнения функции/метода. Так что у правильно спроектированного скрипта не будет "течь" память, особенно после php 5.3.

Конструкцию unset обычно используют не для очистки памяти ради её экономии, а в таких типовых случаях, как очистка методов объекта и элеменов массивов. Либо если есть какие-нибудь большие циклы с большими временными переменными, а скрипт запущен в режиме демона.

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 14/12/14 в 23:14       Ответить с цитатойцитата 

ravlio писал:
Так что у правильно спроектированного скрипта не будет "течь" память, особенно после php 5.3.

Как текла так и продолжает течь. Особенно на динамически создаваемых массивах и объектах.
К примеру на том же phpexcel далеко нубы сидят. А создание файлика в 300к весом, запросто под пол гига памяти сожрет. Казалось бы, что там нам 20к записей в простой worksheet запихать, где ни формул ни разметки.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

0
 

💀💀💀

С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728

Ссылка на сообщениеДобавлено: 14/12/14 в 23:25       Ответить с цитатойцитата 

ну это вроде как стало решаемо после 5.3
http://php.net/manual/ru/features.gc.collecting-cycles.php

0
 



С нами с 17.08.11
Сообщения: 61
Рейтинг: 62

Ссылка на сообщениеДобавлено: 15/12/14 в 21:49       Ответить с цитатойцитата 

Stek писал:
Как текла так и продолжает течь. Особенно на динамически создаваемых массивах и объектах.
К примеру на том же phpexcel далеко нубы сидят. А создание файлика в 300к весом, запросто под пол гига памяти сожрет. Казалось бы, что там нам 20к записей в простой worksheet запихать, где ни формул ни разметки.

Не знаю что там за phpexcel, не работал с ним, но пусть там разработчики хоть семь пядей во лбу, это не мешает им писать прожорливые программы. Возможно особенности формата, много временных данных. Тут важно не то что объекты занимают пол-гига в памяти, а то, чтобы они потом эти пол-гига освободили после деструкции.

Утечка памяти и объем памяти, занимаемой переменными и объектами — это не одно и то же. PHP жрёт много памяти, так как у него все типы хранится в одной структуре zval, которая очень раздута (в php 7, кстати, они это дело сильно оптимизировали).

Да, возможно ещё у тебя включён xdebug с разными директивами, он даёт довольно большой оверхед.

А PHP не течёт после 5.3. Тому в подверждение проекты типа reactPHP, phpDaemon, которые работают могут работать без перебоя на огромных нагрузках. Могут течь какие-нибудь левые экстеншены — это да.

0
 

php

С нами с 09.10.06
Сообщения: 3706
Рейтинг: 2410


Передовик Master-X (16.01.2010)
Ссылка на сообщениеДобавлено: 28/12/14 в 20:40       Ответить с цитатойцитата 

Stek писал:
После заверщения скрипта, память всегда очищается, так как все что связано со скриптом убивается.

Но если внутри скрипта у тебя куча временных больших массивов, то советую делать
Код:

$a ... тут массив создан и стал большим

//чистим память
$a = array();
unset($a);


Из за кучи изменений между пхп версиями, unset не всегда чистит память.


Реальный пример где не чиститься? php по дефолту очищает все после интерпретации сценария.

IPhosters.com - любые решения для Вас (виртуалы от $4.99, vps от $11.99, дедики от $95)

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »