Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Set {Object} = Nothing 
V
    Опции темы
ИгнатьевАлексей
Дата 23.12.2007, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Друзья! Подскажите, зачем в конце проги присваювают значение Nothing объекту?

Вот, например, в таком случае:
Код

Set applAcad = New AcadApplication
.....
applAcad.Quit
Set applAcad = Nothing


Пишу  Set applAcad = Nothing автоматом, а зачем это - не понимаю.  smile  Ведь при завершении программы та память, которая была выделена под переменные, освобождается и так... Или не все так просто в датском королевстве? 



--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Naghual
Дата 24.12.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 7
Всего: 49



Не все так просто...  Совсем не Так все Просто...
smile


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Akina
Дата 24.12.2007, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 26
Всего: 454



Цитата(ИгнатьевАлексей @  23.12.2007,  12:11 Найти цитируемый пост)
зачем в конце проги присваювают значение Nothing объекту?

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 24.12.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Akina,  можно я напишу фразу, а вы, мастер, скажете - правильно я рассуждаю, или нет... Можно?

В начале текста программы я написал:
Код

Dim a As Boolean

в конце 
Код

End Sub

Это значит, что при выполнении, программа в точке Dim a As Boolean выделила свободную память под переменную a, а в точке End Sub освободила эту память. Это присуще языкам высокого уровня.
Так или нет? Скажите, плз.


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 24.12.2007, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 26
Всего: 454



Цитата(ИгнатьевАлексей @  24.12.2007,  11:07 Найти цитируемый пост)
Так или нет?

Так.
Однако переменная - это на 100% внутреннее дело программы, и она гарантированно будет очищена правильно.
Совсем другое дело - объект. Его создали и дергали за разные выступающие части, а он в свою очередь тоже куда-то лазил, где-то что-то у кого-то просил... и если его прибить, то вовсе не факт, что запрошенные им для выполнения затребованных операций ресурсы будут отпущены, очищены и закрыты правильно при неявном закрытии. Особенно это относится к асинхронным операциям в многомодульных проектах. Garbage Collection хоть и написан хорошо, но всех случаев предусмотреть не в силах.

Простейший пример: вызовите любой СОМ-объект (скажем, Excel.Application), закройте его... а СОМ-сервер останется висеть в памяти. Впрочем, пример не корректен, ибо не та причина - но смысл его приблизительно тот же.

В общем, это такой же признак "правильного" программирования, как, например, явная декларация всех переменных в определенный (не Variant - когда это возможно, конечно) тип или, например, не-использование goto...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 24.12.2007, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Akina, огромное спасибо за обстоятельное разъяснение!
Таким образом, для каждого Set (что-то) As (какой то объект) следует в конце поставить Set (что-то) = Nothing. Включая и объект Range. Правильно?


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Akina
Дата 24.12.2007, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

Репутация: 26
Всего: 454



Хуже. Для каждого типа объекта следует использовать свои заморочки. Например Recordset перед явным =Nothing надо столь же явно .Close...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ИгнатьевАлексей
Дата 24.12.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Akina, понял..... 
Никто ведь и не говорил, собственно, что программист-простая профессия... smile 


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




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


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

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