Задать вопрос
@kofon
Я человек

C#. DataAdapter нужно ли вызывать Dispose?

Нужно ли вызывать метод Dispose или закидывать в using?
adapter = new SqlDataAdapter(cmd);
// ... actions
adapter.Dispose();    // здесь нужно?


Просто проверял через декомпилятор и увидел там, что Sql, OleDb и Odbc не переопределяют метод Dispose.
  • Вопрос задан
  • 2875 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
zvoice
@zvoice
Используйте using конструкцию - никогда не ошибетесь - если нужен вызов Dispose - компилятор вызовет его за Вас.
Ответ написан
Nipheris
@Nipheris Куратор тега C#
Толк от вызова метода Dispose есть всегда, когда есть сам метод Dispose (а если быть точным - если реализован интерфейс System.IDisposable). Тут просто не ваша ответственность разбираться - нужно ли вызывать Dispose или нет. Если автор класса реализовал этот интерфейс, значит для чего-то это ему нужно. Как правило это нужно, если используются управляемые вручную ресурсы (например, открытые файлы), либо в объекте создаются другие объекты, которые также IDisposable, и они должны подчищаться при disposing-е основного объекта, их создавшего.
Если вы сталкивались с С++, то на мой взгляд Dispose - это и есть настоящий "деструктор" для объекта, который нужно вызывать самому (прямо или косвенно, с помощью using), чтобы корректно завершить жизненный цикл объекта. Так или иначе, вызывайте Dispose всегда, когда завершаете взаимодействие с объектом. Важно, что даже если СЕЙЧАС в реализации этого метода особо ничего не происходит, функционал может быть добавлен ПОЗДНЕЕ, в новой версии библиотеки которую вы используете. И тогда вам придется исправлять ваш код, чтобы избежать утечки ресурсов (незакрытые файлы или коннекции к БД часто гораздо бОльшая проблема, чем подтекающая память).
Ответ написан
@kofon Автор вопроса
Я человек
Для Nipheris
Там с пробелами проблемы...

Вот так будет выглядеть код:
using (SqlConnection con = ...)
{
     using (SqlCommand cmd = ...)
     {
           using (SqlReader reader = ...)
           {
                     // ...
           }
     }
 }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы