Использование оператора и пула соединений - PullRequest
1 голос
/ 06 июня 2011

Недавно я познакомился с понятием «пул соединений» в .NET, и поэтому я немного сомневаюсь, что хотел бы, чтобы кто-нибудь разъяснил мне его. Если я использую следующий фрагмент кода, когда соединение с базой данных будет возвращено в пул, чтобы оно могло использоваться другой частью приложения?

using (SqlConnection NewConnection = new SqlConnection(ConnectionString))
{
    using (SqlCommand NewCommand = new SqlCommand("SomeCommand", NewConnection))
    {
        try
        {
            NewConnection.Open();

            // Do some work...

            NewConnection.Close(); // <-- Here?
        }
        catch
        {
            // Error handling...
        }
    }
}

// <-- Here?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Соединение действительно будет возвращено в пул после завершения выполнения блока using.

Оператор using является синтаксическим сахаром -Компилятор генерирует правильный блок Dispose, который закрывает соединение и возвращает его в пул соединений.

0 голосов
/ 06 июня 2011

Вы должны рассматривать объект SqlConnection и базовое соединение как отдельные.Это базовое соединение, которое объединено в пул.Он возвращается в пул при удалении SqlConnection либо явным использованием Dispose(), либо блоком using.Позже может быть создан новый (другой) SqlConnection с тем же базовым соединением.

Итак: волшебство происходит:

using (SqlCommand NewCommand = new SqlCommand("SomeCommand", NewConnection))
{
    ...
} <==== here

* = оно также может (я не проверял) быть возвращенным в пул GC / finalizer - но мы не должнысосредоточиться на этом, потому что, если это произойдет, вы уже делаете это неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...