Подтвердить что ты не робот

С# Linq-to-Sql - Если DataContext будет удален с помощью IDisposable

У меня есть несколько методов, связанных с БД, и все они начинаются с вызова

FaierDbDataContext db = new FaierDbDataContext();

Так как объект Linq2Sql DataContext реализует IDisposable, следует ли это использовать с "использованием"?

using (FaierDbDataContext db = new FaierDbDataContext()) {
    // use db here
}

Каковы последствия его использования так или иначе?

4b9b3361

Ответ 1

В отличие от большинства типов, которые реализуют IDisposable, DataContext не действительно нужно утилизировать - по крайней мере, не в большинстве случаев. Я спросил Мэтта Уоррена об этом дизайнерском решении, и здесь был его ответ:

Есть несколько причин, по которым мы реализовали IDisposable:

  • Если прикладная логика должна удерживаться на сущности за пределами, когда Предполагается, что будет использоваться DataContext или действующий, вы можете обеспечить выполнение этого договора вызов Dispose. Отложенные погрузчики в этот объект по-прежнему будет ссылаться DataContext и попытается использовать его если какой-либо код пытается отложенные свойства. Эти попытки не удастся. Утилизировать также заставляет DataContext для сброса кеша материализованных объектов, чтобы один кэшированный объект не будет случайно поддерживать все материализованные субъекты через этот DataContext, который в противном случае возникает то, что кажется утечка памяти.
  • Логика, которая автоматически закрывает соединение DataContext, может быть обманывает, оставляя соединение открытый. DataContext опирается на код приложения, перечисляющий все результаты запроса с момента получения конец набора результатов запускает подключение к закрытию. Если приложение использует IEnumerable Метод MoveNext вместо foreach в С# или VB, вы можете выйти перечисление преждевременно. Если ваш приложение испытывает проблемы с соединения не закрываются, и вы подозревать автоматическое закрытие не работает, вы можете использовать Dispose как работа вокруг.

из источника