Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизация, unset(); очистка 
V
    Опции темы
GeneralElectric
Дата 19.2.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Ну вот как раз информация, показываемая в top - то есть использование памяти самим интерпретатором, а не исполняемым скриптом, может и не высвобождаться, это да.
PM MAIL   Вверх
sTa1kEr
Дата 19.2.2008, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



Цитата(GeneralElectric @  19.2.2008,  01:15 Найти цитируемый пост)
Ну вот как раз информация, показываемая в top - то есть использование памяти самим интерпретатором, а не исполняемым скриптом, может и не высвобождаться, это да. 

А какой тогда смысл использовать unset() кроме как по прямому предназначению: разлинковки переменной, удаления элемента массива, статических переменных и прочего (где без unset() действительно не обойтись) Если памяти в системе больше не станет (хотя для глобальных переменных это может и будет иметь какой-то смыл, но это уже из другой оперы), а следовательно и общая производительность не увеличится, то какой смысл городить повсюду unset()? Это из серии бреда вроде "увеличение производительности за счет не использования интерполяции переменных в строке" или "for vs foreach" итд.

PS Особенно забавно читать подобные вопросы у авторов, которые пишут что-то вроде
Код

$r = mysql_query("SELECT * FROM `table`");
$num = mysql_num_rows($r);
// Работаем дальше, про запрос забыли... и нам все равно, что вся таблица у нас сейчас в памяти сидит, которая по сути вообще не нужна была

и после этого спрашивают, что быстрее echo или print...
PM MAIL   Вверх
Staind
Дата 19.2.2008, 14:32 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 17.12.2007
Где: Планета сокровищ

Репутация: 2
Всего: 3



Вроде как $r - это только указатель. Там, по сути, ничего не содержится. Все берется из базы. Конечно, если потом взять и написать:
$r = mysql_fetch_assoc ($r) - тогда да, другой разговор.
--------------------
Ничто так не раздражает человека, как просьба успокоиться
PM MAIL WWW ICQ   Вверх
solenko
Дата 19.2.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



да, $r -- только указател на объект, который собдержится в памяти вашего сервера и принадлежит процессу php.

Добавлено через 2 минуты и 54 секунды
Вы же не на c пишете. Все равно память освобождает сборщик мусора, а не сами программисты. unset лишь разрешает ему эту память очистить.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
mishaSL
Дата 19.2.2008, 19:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(sTa1kEr @  18.2.2008,  22:51 Найти цитируемый пост)
или хотя бы пример кода, где именно unset() высвободит хоть байт памяти.

Цитата(sTa1kEr)

Если памяти в системе больше не станет (хотя для глобальных переменных это может и будет иметь какой-то смыл, но это уже из другой оперы), а следовательно и общая производительность не увеличится, то какой смысл городить повсюду unset()?

sTa1kEr, чтобы не было недопонимания объясню:
unset - уничтожает переменную, но не высвобождает память используемую интерпретатором PHP, хотя для самого PHP эта память больше не используется скриптом, что позволяет не переживать за memory_limit. НО когда мы уничтожили переменную, память которую она занимала, возможна для повторного использования.
Пример без unset:
Код

<?
$pid = posix_getpid();
$a = array();
for ($i = 0; $i < 24857; $i++)
{
    $a[] = new stdClass();
}
echo `top -d1 -b | grep $pid`;

$b = array();
for ($i = 0; $i < 24857; $i++)
{
    $b[] = new stdClass();
}
echo `top -d1 -b | grep $pid`;
?>


Результат без unset:
Код

7249 ...  32136K 24488K ....
7249 ...  37256K 29476K ....


Пример с использованием unset:
Код

<?
$pid = posix_getpid();
$a = array();
for ($i = 0; $i < 24857; $i++)
{
    $a[] = new stdClass();
}
echo `top -d1 -b | grep $pid`;
unset($a);
$b = array();
for ($i = 0; $i < 24857; $i++)
{
    $b[] = new stdClass();
}
echo `top -d1 -b | grep $pid`;
?>


Результат с использованием unset:
Код

... 32144K 24664K ...
... 32144K 24844K ...



sTa1kEr, я не пытаюсь сказать, что нужно везде использовать unset(). Я просто хочу обяснить, что если переменная занимает реально много памяти, то ее необходимо уничтожить. 


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
sTa1kEr
Дата 19.2.2008, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



mishaSL, ясно, спасибо за разъяснения.
PM MAIL   Вверх
mishaSL
Дата 19.2.2008, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

Репутация: 19
Всего: 54



Цитата(sTa1kEr @  19.2.2008,  19:49 Найти цитируемый пост)
mishaSL, ясно, спасибо за разъяснения. 

Всегда рад интересной беседеsmile


--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
flashaa
Дата 19.2.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 796
Регистрация: 7.3.2006

Репутация: 19
Всего: 25



MishaSL, спасибо
PM MAIL   Вверх
Хрипа
Дата 20.2.2008, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



Всем спасибо за дисскусию очень приятно было слушать различные мнения. )
--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.