![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Как мне показалось, программисты в основном забивают на эти методы, надеясь на автоматический GC.
Вот, хочется выяснить, как обстоят дела с их использованием. Вызываете ли вы Dispose для стандартных классов? Пишите ли метод Dispose и деструкторы для собственных классов? И какие вообще рекомендации существуют по этому поводу. -------------------- Да. Именно так. |
|||
|
||||
| nikf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 127 Регистрация: 6.6.2005 Где: город-герой Жирно вск Репутация: нет Всего: 1 |
Если есть Dispose всегда его вызываю. Для свих класов делаю реализацию IDisposable толко в том случае если он сам содержит объекты реализующие IDisposable. Вот и все рекомендации. Врядли будут еще какие
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
вызываю. но своих не пишу, если нече2о освобождать
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Естественно. Просто недавно на собеседовании в одной компании у меня как раз возник спор об использовании Dispose Да и в том проекте, где я сейчас занят -- на сотни тысяч строк практически ни одного Dispose -------------------- Да. Именно так. |
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: 1 Всего: 3 |
Dispose нужен только там, где есть неуправляемые объекты (в случае когда пишется пользоваетельский класс).
А что касается вызывать его или нет? То вызывать конечно надо... Но если не вызвать, то всё равно больших проблем не будет, так как его вызовет деструктор, но немного позже. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
...который не обязательно выполнится. Ведь .NET не обеспечивает детерминированного завершения.
|
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: 1 Всего: 3 |
Ты хочешь сказать, что NET не гарантирует вызов деструктора? |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Гарантирует. Но в какой именно момент -- неизвестно. -------------------- Да. Именно так. |
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: 1 Всего: 3 |
Так и я о том же Это сообщение отредактировал(а) Plamenk - 3.11.2005, 09:43 |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
ага. "Немного позже" == при выгрузке AppDomain
|
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: 1 Всего: 3 |
А что деструкторы вызваются при
А я думал что, при сборке муссора. Хотя могу ошибаться |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
дык сборка мусора и происходит при выгрузке домена приложения. И то не всегда. Создай консольное приложение, напиши класс типа
и насоздавай кучу таких объектиков. Не факт, что ты увидишь какие-то сообщения. ЗЫ деструктор в С++ != завершитель в С#. Надо это помнить |
|||
|
||||
| Plamenk |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 258 Регистрация: 18.2.2003 Репутация: 1 Всего: 3 |
Посмотри за окном output. У меня не разу не получилось, чтобы хотябы для одного объекта не вызвался деструктор.
Может в VB.Net, что-то по другому? Это сообщение отредактировал(а) Plamenk - 3.11.2005, 15:44 |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
может я и ошибаюсь...
компа нета проверить... мне казалось, GC происходит не всегда |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
GC, вообще-то, собирает мусор только в двух случаях:
а) когда он посчитает, что свободной памяти ему маловато (10000 таких объектов - это что-то вроде 40-60 Кб) б) когда приложение простаивает Принудительно можно вызвать цикл сборки мусора с пом. GC.Collect(), тогда и увидим сообщения из деструкторов. З.Ы.
Сборка мусора происходит периодически, при выполнении условий а) и б). При выгрузке домена приложения вся выделенная ему память освобождается целиком. -------------------- ![]() |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |