Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопрос о Dispose и FileStream 
:(
    Опции темы
-ser-
Дата 5.4.2005, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Создал простенький класс А без какого-либо наследования, который работает с базой данных и файл-стримами.
затем в методах других классов обявляю instance класса А и все работает превосходно, но прочитал мелкомягких о IDisposable.Dispose Methodе:
Цитата
Use this method to close or release unmanaged resources such as files, streams, and handles held by an instance of the class that implements this interface...

да, есть у меня в моем классе А те же файл-стримы, которые я там создаю, читаю и закрываю, и как я понял из вышенаписанного они являются unmanaged resource'ами. Допустим. Hо никакие интерфейсы я не наследовал и не реализовывал. Получается что instancе'ы класса А у меня не освобождаются автоматически при выходе из вызывающих методов?


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 5.4.2005, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Сразу по выходу из метода - не освобождаются. Если ссылок на объект А больше нету, он помечается как кандидат на удаление при следующей сборке мусора, а уж когда она будет выполняться - это одному GC известно smile. Так что, ресурсы нужно освобождать явно, т.е. принудительно. Реализовать для этого метод Dispose или нет - личное дело каждого (IDisposable - это скорее соглашение, чем требование).


--------------------
user posted image
PM MAIL WWW   Вверх
-ser-
Дата 5.4.2005, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



То есть, если я правильно понял, если это не критически в плане время+ресурсы, то об этом можно с чистой совестью забыть и положиться на GC, а это 99.9% случаев. (я то где-то читал что GC запускается приблизительно каждую ms.)
Цитата
Реализовать для этого метод Dispose или нет-личное дело каждого

получается, IDisposable это предлагаемый способ, но ресурсы можно освобождать и без него?


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 5.4.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Если речь идёт о файлах, то "с чистой совестью забыть" может привести к тому, что файл некоторое время останется открытым (и возможно заблокированным, если не был выставлен какой-нибудь из FileShare.xxx при создании FileStream). Каждую миллисекунду GC вроде как не вызывается... хотя точно не уверен smile. Ресурсы можно освобождать без IDisposable, т.к. это лишь предлагаемый ООП-вариант (аналогия с EventArgs и EventHandler - не нравится, не юзай).


--------------------
user posted image
PM MAIL WWW   Вверх
-ser-
Дата 5.4.2005, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 5.4.2005, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(ser @ 5.4.2005, 10:19)
насчет файлов, почему он может остаться открытым, если после работы с ним мы его преспокойненько закроем

Тогда Ok smile
Просто есть люди, которые поработав с объектом потока, "бросают" его, не заботясь о закрытии.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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