C # - освободить все ресурсы, используемые объектом - PullRequest
1 голос
/ 17 мая 2010

Есть ли способ освободить все ресурсы, используемые определенным объектом?

Если нет, то почему бы мне не использовать метод GC.Collect()?

Ответы [ 2 ]

2 голосов
/ 17 мая 2010

Это зависит от того, какие ресурсы вы имеете в виду.

Если вы просто говорите о памяти, то GC действительно справится с этим, когда у вас больше не будет ссылок на объект. Вызов GC.Collect побудит GC работать, но нет никакой гарантии того, что GC будет работать, даже если вы вызываете GC.Collect, поскольку он работает в отдельном потоке.

Если вы говорите о неуправляемых ресурсах, таких как файловые дескрипторы, соединения с БД и т. П., То лучший способ управлять ими - реализовать интерфейс IDispsable, и эти ресурсы будут освобождены вызывающими вашего кода, вызывающими Dispose метод (или, действительно, путем утилизации ГХ вашего объекта).

2 голосов
/ 17 мая 2010

Типы с ресурсами должны реализовывать IDisposable, и для освобождения этих ресурсов необходимо вызвать Dispose (или обернуть их в оператор using). GC.Collect необходим только для плохо написанных объектов, которые имеют ресурсы, но не реализуют IDisposable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...