![]() |
|
Модераторы: mihanik |
![]()
|
|
| ИгнатьевАлексей |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: 2 Всего: 3 |
Друзья! Подскажите, зачем в конце проги присваювают значение Nothing объекту?
Вот, например, в таком случае:
Пишу Set applAcad = Nothing автоматом, а зачем это - не понимаю. -------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
|||
|
||||
| Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 7 Всего: 49 |
Не все так просто... Совсем не Так все Просто...
-------------------- Я желаю всем Счастья! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
А затем же, зачем закрывают файлы, возвращают блоки памяти, отпускают хэндлы, убивают мьюты... короче, в явной форме чистят за собой. Не дашь команду системе позакрывать объекты - потом будешь искать, чего это у тебя база раз в неделю рушится... или программа второй раз без ребута не стартует... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ИгнатьевАлексей |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: 2 Всего: 3 |
Akina, можно я напишу фразу, а вы, мастер, скажете - правильно я рассуждаю, или нет... Можно?
В начале текста программы я написал:
в конце
Это значит, что при выполнении, программа в точке Dim a As Boolean выделила свободную память под переменную a, а в точке End Sub освободила эту память. Это присуще языкам высокого уровня. Так или нет? Скажите, плз. -------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Так. Однако переменная - это на 100% внутреннее дело программы, и она гарантированно будет очищена правильно. Совсем другое дело - объект. Его создали и дергали за разные выступающие части, а он в свою очередь тоже куда-то лазил, где-то что-то у кого-то просил... и если его прибить, то вовсе не факт, что запрошенные им для выполнения затребованных операций ресурсы будут отпущены, очищены и закрыты правильно при неявном закрытии. Особенно это относится к асинхронным операциям в многомодульных проектах. Garbage Collection хоть и написан хорошо, но всех случаев предусмотреть не в силах. Простейший пример: вызовите любой СОМ-объект (скажем, Excel.Application), закройте его... а СОМ-сервер останется висеть в памяти. Впрочем, пример не корректен, ибо не та причина - но смысл его приблизительно тот же. В общем, это такой же признак "правильного" программирования, как, например, явная декларация всех переменных в определенный (не Variant - когда это возможно, конечно) тип или, например, не-использование goto... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ИгнатьевАлексей |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: 2 Всего: 3 |
Akina, огромное спасибо за обстоятельное разъяснение!
Таким образом, для каждого Set (что-то) As (какой то объект) следует в конце поставить Set (что-то) = Nothing. Включая и объект Range. Правильно? -------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Хуже. Для каждого типа объекта следует использовать свои заморочки. Например Recordset перед явным =Nothing надо столь же явно .Close...
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| ИгнатьевАлексей |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 369 Регистрация: 18.11.2005 Репутация: 2 Всего: 3 |
Akina, понял.....
Никто ведь и не говорил, собственно, что программист-простая профессия... -------------------- Vingrad - FOREVER !!! "Как вы яхту назовете - так она и поплывет!" Капитан Врунгель |
|||
|
||||
![]()
|
| Правила форума "Программирование, связанное с MS Office" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |