Jak zmusić SqlConnection do fizycznego zamknięcia podczas korzystania z puli połączeń?

Rozumiem, że jeśli wystąpię obiekt SqlConnection, naprawdę chwytam połączenie z puli połączeń. Gdy zadzwonię do Open (), otworzy połączenie. Jeśli wywołam metodę Close () lub Dispose () na tym obiekcie SqlConnection, jest on zwracany do puli połączeń.

Jednak tak naprawdę nie mówi mi się, czy jest naprawdę zamknięty, czy nadal mam aktywne połączenie z bazą danych.

Jak mogę wymusić zamknięcie SqlConnection na poziomie sieci, a przynajmniej powiedzieć, kiedy się zamyka?

Przykład:

using(SqlConnection conn = new SqlConnection(DBConnString)) {

   conn.Open();
   SqlCommand cmd = conn.CreateCommand();
   ...
   cmd.ExecuteReader(CommandBehavior.CloseConnection);
   ...
}
Pierwsze uruchomienie: 300 msDrugi przebieg: 100 msTrzeci przebieg: 100 msPo odczekaniu długiego czasu (30 minut): 300 ms

Jeśli połączenie było PRAWIDŁOWE zamykanie, drugi i trzeci przebieg powinny również wynosić 300 ms. Ale wiem, że połączenie nie jest naprawdę zamknięte dla tych uruchomień (sprawdziłem monitor aktywności serwera SQL). Wykonanie uwierzytelniania / etc nie wymaga dodatkowych 200 ms.

Jak wymusić prawdziwe połączenie?

Pomysły

Czy działa CommandBehavior.CloseConnection? (najwyraźniej nie?)Czy działa ustawienie „Max Pool Size = 0” w ciągu połączenia? (byłoby to rozwiązanie pyrrusowe)Czy Dispose () działa?

Referencje

Artykuł naŁączenie połączeńOto kolejny, który nam to mówiClose () nie zamyka się naprawdę połączenie.Artykuł na tematzestawianie połączeń plusy i minusy

questionAnswers(7)

yourAnswerToTheQuestion