2010-09-28 5 views
9

Mam aplikację, która używa SqlConnection.ClearAllPools do zamknięcia wszystkich połączeń przed upuszczeniem bazy danych.SqlConnection.ClearAllPools, co zostało wyczyszczone?

Istnieje przypadek, w którym połączenie nadal istnieje. To połączenie zostało utworzone w innej domenie aplikacji.

Zastanawiam się, które połączenia są zamknięte przez SqlConnection.ClearAllPools?

  • Tylko połączenia otwarte przez proces wywołujący (lub AppDomain)?
  • Wszystkie połączenia otwarte przez to urządzenie?
  • ...?

Odpowiedz

9

Zamyka wszystkie połączenia otwarte tylko przez proces wywołujący. Opróżnia wszystkie pule połączeń, które są powiązane z procesem. Quote:

Pula połączeń i ciąg połączenia idą w parze. Każda pula połączeń jest powiązana z odrębnym ciągiem połączenia, który również jest specyficzny dla aplikacji. Co to oznacza - oddzielna pula połączeń jest utrzymywana dla każdego odrębnego procesu, domeny aplikacji i ciągu połączenia.

+0

Dzięki. Dokumentacja w ogóle o tym nie mówi. Wiem, że istnieje pula dla każdej konfiguracji i każdej aplikacji. Ale ClearAllPools to liczba mnoga i czyści kilka pul. Ale które? Nie może polegać na konfiguracji, ponieważ jest to metoda statyczna bez żadnych argumentów. Ale czy to zależy od domeny procesu/aplikacji? –

+0

@Stefan, tak, dokumentacja nie jest jasna co do tej metody. W rzeczywistości może być wiele pul na domenę aplikacji, jeśli używa ona różnych ciągów połączeń. Po przekazaniu ciągu połączenia do 'SqlConnection' wewnątrz domeny aplikacji to połączenie zostanie narysowane z puli powiązanej z tą pulą połączeń lub zostanie utworzona nowa pula, jeśli nie istnieje. Dlatego istnieje również metoda 'SqlConnection.ClearPool', która pozwala wyczyścić pulę powiązaną tylko z danym połączeniem. Więc zasadniczo pula jest za ciąg połączenia/domeny aplikacji. –

+0

Pewnie, to część, którą mogłem znaleźć w dokumentacji. Ale nie mogłem wywnioskować z tego "zakresu" 'ClearAllPools'. –