![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Хрипа |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 11.12.2006 Репутация: -6 Всего: нет |
Привет всем, вот такой меня мучает вопрос:
будет будет ли работать скрипт быстрей если постоянно почишать код через unset(); Надо ответ да или нет, если да то почему, если нет то почему нет ? Всем спасибо --------------------
<Вырезана, как не соответствующая правилам форума > |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
нет.
потому что тебе не нужно об этом думать. |
|||
|
||||
| mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 19 Всего: 54 |
Зависит от конкретной ситуации. В случае, если в скрипте вы считываете файл (размер которого вы заранее не знаете) или формируете достаточно большой по объему массив, то желательно уничтожать эти переменные, когда они вам уже не нужны, т.к. есть вероятность что с ростом проекта не будет хватать памяти на выполнение скрипта (memory_limit).
-------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
mishaSL, скрипт не должен считывать большой файл или формировать "достаточно большой" массив. Это раз.
Делать ансет за сотую долю секунды до конца выпонения скрипта можно, но много ли в этом смысла? Это два. |
|||
|
||||
| mishaSL |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 19 Всего: 54 |
Бывают ситуации, когда без этого сложно обойтись. Или вы с этим тоже не согласитесь?
Вопрос не в сотой доли секунды, вопрос в общей нагрузке на сервер и ограничении памяти. Понятно дело, что так делать бессмысленно:
но в случае, если вы обрабатываете большой объем данных, уничтожение переменной желательно. -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
||||||
|
|||||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Я не думаю, что ансет хоть как-то повлияет на производительность системы и объем занимаемой памяти
Это сообщение отредактировал(а) GeneralElectric - 18.2.2008, 09:30 |
|||
|
||||
| mishaSL |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1046 Регистрация: 10.1.2007 Где: Санкт-Петербург Репутация: 19 Всего: 54 |
А я это знаю точно, т.к. сталкивался с этим не один раз. Лучше лишний раз перестраховаться в местах, где объем данных хранимый в переменной, может сильно меняться из-за каких-либо факторов, не зависящий на прямую от программиста. Чем потом в готовой проекте искать проблемные места. -------------------- Лучший способ научиться программированию - это посмотреть как это делают другие... |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Если эта ситуация не единичная, разовая, а возникает при штатном обращении к сайту, то, разумеется, не соглашусь. В этом случае надо не ансеты делать, а вообще избавляться от вороча ния бегамайтами данных. А в единичных случаях погоды не сделает. |
|||
|
||||
| Хрипа |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 11.12.2006 Репутация: -6 Всего: нет |
mishaSL, я согласен ведь если бы он не нужен был его бы и небыло. )
--------------------
<Вырезана, как не соответствующая правилам форума > |
|||
|
||||
| A1ekcandr |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 99 Регистрация: 27.6.2007 Репутация: 1 Всего: 1 |
В любом случае после использования переменной ее лучше уничтожить, ведь каждая переменная жрет память, конечно в большинстве случаев не существенно, но писать unset() считается хорошим тоном.
зы: Лично я не использую |
|||
|
||||
| CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: 3 Всего: 4 |
Практики нет, но по теоретический части скажу, что unset судя по всему полезно делать за сравнительно долгое время до окончания выполнения скрипта для более-менее больших данных (чтобы память ими не была занята долгое время), а так же перед тем, как получить новую порцию объемных данных (чтобы было меньше вероятности нехватки памяти).
Делать в конце скрипта смысла абсолютно никакого не имеет, после окончания работы вся память и так освобождается. Грубый пример скрипта, когда unset необходим:
|
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Ситуации, когда НАДО делать unset - очень специфичны. Не стоит забывать о том, что PHP сам следит за памятью и, если грамотно спланировать области видимости переменных, ничего удалять не потребуется. К примеру, если мы получаем выборку из БД, то она наверняка потребуется нам в отображении страницы - т.е. вплоть до самого конца работы скрипта(в хороших проектах отображение - последняя стадия). Если мы занимаемся работой с повторяющимся куском кода, то в этом же повторяющемся куске кода и следует делать все, что хотим, а не складывать там данные до востребования. На моем опыте unset был нужен, когда получался один массив, с ним производились какие-то действия, затем из него удалялись некоторые ключи и данный массив передавался в дальнейшую обработку. Это сообщение отредактировал(а) flashaa - 18.2.2008, 22:24 |
|||
|
||||
| sTa1kEr |
|
|||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Какой смысл надевать штаны через голову? unset() предназначен совсем не для этого. http://php.net/unset
Откуда такая информация, что unset() высвобождает память? Хотелось бы увидеть достоверный источник этой информации или хотя бы пример кода, где именно unset() высвободит хоть байт памяти. Естественно, про данные типа "ресурс" не в счет, они действительно могут занимать много памяти и за ними действительно надо следить (mysql_free_result(), fclose(), etc). |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
sTa1kEr, я запусил код, который выводит memory_get_usage, создает толстую переменную, снова выводит память, ансетит переменную и опять выводит. Память возвращается.
Винда, 5.2.5 |
|||
|
||||
| sTa1kEr |
|
||||
|
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Странно, а top мне говорит совсем другое:
Или
Это сообщение отредактировал(а) sTa1kEr - 19.2.2008, 00:06 |
||||
|
|||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |