Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Общий вопрос по PHP, на примере GDlib
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1044
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 28 дней
Карма: 13




Привет, гуру! )

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

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

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

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

Вопрос! А нафига imagedestroy()? ))) Его все же надо использовать или забить со спокойной душой?


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 3 дня
Карма: 299

Трезвый :
5 лет, 11 месяцев, 13 дней


В PHP есть чистильщик. smile.gif Он очищает память по окончании работы скрипта, а не когда
Цитата (Ron @ 27.10.2015 - 06:43)
программист закончил с ним работать по тексту

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


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

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

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1044
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 28 дней
Карма: 13




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

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

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

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



--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Alchemist  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 663
Пользователь №: 5285
На форуме: 8 лет, 6 месяцев, 1 день
Карма: 9




PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1044
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 28 дней
Карма: 13




О как! А я на эту инфу чего-то не наткнулся. Спасибо!


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14973
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 1 день
Карма: 443




Цитата (Ron @ 27.10.2015 - 10:43)
Но обнаружил у себя в библиотеке баг, когда за прогонку скрипта теоретически должно появиться огромное количество "брошеных" ресурсов.

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

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


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

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

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

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Ron  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1044
Пользователь №: 41686
На форуме: 1 год, 3 месяца, 28 дней
Карма: 13




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

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

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


--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса