[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Общий вопрос по PHP
Ron
Привет, гуру! )

Кто подскажет, как PHP обрабатывает ресурсы? Например, объект уничтожается ровно в тот момент, когда "пройдена" по ходу выполнения кода последняя ссылка на него. Если правильно понимаю, если программист закончил с ним работать по тексту, то выполняется __destruct и экземпляр разрушается.

Теперь о главном. Создаем ресурс GD, с помощью функции $img=imagecreatetruecolor(100,100), к примеру. Теперь $img содержит ссылку на ресурс. Мы с ним работаем, радуемся - всё отлично. Далее, мы берем и пишем еще раз $img = imagecreatetruecolor(200,200). С этого момента в $img лежит ссылка на совершенно другой ресурс. Что произошло с первым?

По идее, мы должны выполнять imagedestroy для уничтожения каждого ресурса GD для освобождения памяти. Но обнаружил у себя в библиотеке баг, когда за прогонку скрипта теоретически должно появиться огромное количество "брошеных" ресурсов. Ну у меня другое, imagecreatefromjpeg, но полагаю никакой разницы нет. Ресурс он и есть ресурс.

То есть они получается уничтожаются примерно таким же образом, как и объекты. Иначе объяснить отсутствие проблем с моментально переполняемой под скрипт памятью я не могу.

Вопрос! А нафига imagedestroy()? ))) Его все же надо использовать или забить со спокойной душой?
twin
В PHP есть чистильщик. smile.gif Он очищает память по окончании работы скрипта, а не когда
Цитата (Ron @ 27.10.2015 - 06:43)
программист закончил с ним работать по тексту

По этому память нужно чистить ручками, коли он её много жрет. Для того и imagedestroy()

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
Ron
Цитата (twin @ 27.10.2015 - 10:50)
Он очищает память по окончании работы скрипта, а не когда

Ок, почему 80 000 брошенных ресурсов (столько фоток я обработал скриптом) не привели к полному исчерпанию регламентированной памяти уже на 5-й картинке?

Этот вопрос у меня возник в связи с появлением-таки ошибки по исчерпанию памяти. Причем первый раз за все время пользования библиотекой. И что самое классное, при второй прогонке того же самого скрипта, никакой ошибки не появилось.

Тут я и обнаружил место появления брошенных ресурсов.

Alchemist
http://php.net/manual/ru/features.gc.php
Ron
О как! А я на эту инфу чего-то не наткнулся. Спасибо!
sergeiss
Цитата (Ron @ 27.10.2015 - 10:43)
Но обнаружил у себя в библиотеке баг, когда за прогонку скрипта теоретически должно появиться огромное количество "брошеных" ресурсов.

Ты можешь объяснить, зачем ты их создаешь и не используешь? У меня есть подозрение, что тебе нужно начать с оптимизации скрипта smile.gif

И в любом случае, если ты создаешь некий объект, который на некотором этапе становится ненужным, а он занимает некоторое место, то лучше его удалить. Я имею ввиду в первую очередь не простые переменные, а что-то более объемное.
Когда делал демона на ПХП, то очень плотно пообщался с этой проблемой. Пришлось удалять в конце каждого цикла практически все переменные. Иначе очень быстро скрипт падал из-за переполнения памяти.


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Ron
Цитата (sergeiss @ 27.10.2015 - 22:55)
Ты можешь объяснить, зачем ты их создаешь и не используешь? У меня есть подозрение, что тебе нужно начать с оптимизации скрипта

Я использую. Но потом получается так, что ресурс остается без указателя. По всей вероятности уничтожается автоматически.

Кстати, а вот и пруф. Прямо в доке про ресурсы об этом и напсано оказывается.
http://php.net/manual/ru/language.types.resource.php
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.