закрытие соединений в блоке использования - PullRequest
1 голос
/ 01 ноября 2010

При чтении большого количества кода я обнаружил, что данный объект Connection, который реализует IDisposable, вручную закрывается в операторе using.Я вижу это, когда вижу код, связанный с MySQL.

Его не нужно явно закрывать.Зачем разработчику закрывать его вручную?

using(cnn)
{
    //code is here
    cnn.close();
}

Это хорошая / полезная мера?

Ответы [ 4 ]

5 голосов
/ 01 ноября 2010

Явное закрытие в блоке using - это дублирование, вводящее в заблуждение и избыточное , поэтому для меня это плохо вещь.

0 голосов
/ 01 ноября 2010

Это не нужно, поскольку IDbConnection указывается как закрывающий в Dispose ().

(Строго говоря, это определено как освобождение ресурсов в Dispose (), но это равносильно вызову close. Если какое-то соединение с БД не потребляет никаких ресурсов, то это не нужно, но тогда это не будет проблема в любом случае).

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

Как правило, хорошо, чтобы блоки использования были аккуратными, что исключает преимущество, но могут быть и исключения.

0 голосов
/ 01 ноября 2010

Я думаю, что разумно предположить, что объект, реализующий IDisposable, должен очистить свои собственные ресурсы и не требовать закрытия. Теперь он может закрываться не так быстро, как хотелось бы, поэтому вы можете вручную закрыть их, но тогда не будете использовать синтаксис using.

0 голосов
/ 01 ноября 2010

Это зависит от соединения.Многие закрываются в методе Dispose.SQLConnection, например, закрывается в Dispose.

...