Когда нам нужно вызвать Dispose () в dot net c #? - PullRequest
8 голосов
/ 05 мая 2011

Нужно ли утилизировать sqldatareader после его создания?

SqlDataReader reader;
---
---
---
reader.Close();
reader.Dispose();

Ответы [ 4 ]

27 голосов
/ 05 мая 2011

Практическое правило: если класс реализует IDisposable , вы всегда должны вызывать метод Dispose , как только вы закончили использовать этот ресурс. Еще лучше обернуть его в с помощью оператора , чтобы гарантировать, что метод Dispose будет вызван, даже если сгенерировано исключение:

using (var reader = conn.ExecuteReader())
{
    ...
}
2 голосов
/ 05 мая 2011

Одноразовый объект лучше всего использовать (если это возможно) в блоке использования.В конце блока использования объект автоматически удаляется.

Из-за управления памятью всегда рекомендуется утилизировать ваши объекты, если они вам больше не нужны.

Вот некоторые вещи для чтения из MSDN.

1 голос
/ 05 мая 2011

Существует простое правило: если вы закончили с объектом, тип которого реализует IDisposable, тогда вызовите Dispose() для него; Вы должны использовать блок using для этого.

1 голос
/ 05 мая 2011

Рекомендуется использовать шаблон с использованием при работе со всем, что реализует IDisposable

using ()
{
    // use it here
}

Это будет выглядеть после конструкции try..catch..finally и вызова Dispose.

РЕДАКТИРОВАТЬ Ранее я уже говорил, что думал, что Close и Dispose сделали то же самое для читателей (поток, файл, sqldatareader и т. Д.), Но, похоже, это не так, глядя на документацию поSQLDataReader, поэтому мое предположение было неверным.

...