Я согласен со всем вышеперечисленным. Вы должны убедиться, что вы вызываете Dispose()
самостоятельно, и самый простой способ сделать это с помощью оператора using
(вы также можете сделать это самостоятельно в блоке finally
- это более многословно, но иногда необходимо). Если вы этого не сделаете, ваше приложение может обнаружить утечку неуправляемых ресурсов, таких как дескрипторы, или даже неуправляемую память, особенно если где-то под всем этим используются некоторые COM-компоненты или выполняются вызовы в Win32 API. Это может привести к проблемам с производительностью и стабильностью, а также к чрезмерному использованию ресурсов.
Тот факт, что объекты, реализующие IDisposable
, "должны" реализовывать финализатор, который вызывает их метод Dispose(bool disposing)
для освобождения неуправляемых ресурсов, не гарантирует, что это произойдет, поэтому вам определенно не следует полагаться на него. См., Например, http://msdn.microsoft.com/en-us/library/b1yfkh5e%28VS.71%29.aspx для получения дополнительной информации по этому вопросу.
Кроме того, следует иметь в виду, что если в вашем типе есть одноразовые члены, ваш тип должен реализовывать IDisposable
(если жизненный цикл этих членов не управляется другим типом, который, очевидно, может запутаться) или, если вы используете такие члены только в одном методе, или для реализации одного конкретного элемента функциональности, вы должны рассмотреть вопрос о том, чтобы сделать их локальными переменными / параметрами в методах, которые их используют.