2013-01-14 15 views
5

Czytam this pytanie dotyczące usuwania połączeń SQL.Zamykanie(), ale nie usuwanie() Połączenie SQL - efekty

Moje pytanie brzmi, jak źle jest po prostu zamknąć połączenie sql, ale nie można go pozbyć? Mamy funkcję, która jest po prostu zamknięta, ale nigdy nie zbywana, i jest używana 1000 razy dziennie. Czy lepiej jest po prostu go zamknąć, czy lepiej zamknąć i pozbyć się go?

Wiem, że dispose() również zamyka połączenie, jednak chciałbym wiedzieć, dlaczego close nie pozbawia się połączenia.

+1

Jak trudno jest po prostu zawinąć każde połączenie za pomocą instrukcji 'using'? Zrobiłem ten nawyk i używam go wszędzie. – mellamokb

+0

'.Zamknij' prawdopodobnie nie pozbawia połączenia, ponieważ możesz ponownie łatwo wywołać '.Open', aby ponownie otworzyć połączenie. – mellamokb

+0

@mellamokb. Jeśli masz włączone łączenie, możesz łatwo utworzyć połączenie ponownie i dobrze. Pula nie wyrzuci go, dopóki nie będzie nieaktywna przez 2 minuty (domyślnie) –

Odpowiedz

4

Najważniejszą rzeczą w przypadku połączeń jest ich zamknięcie, aby powrócić do puli połączeń.

W związku z tym różnica między wyrzucaniem a zamykaniem połączenia jest niewielka, o ile przestrzega się zasad dotyczących zamykania i ponownego wykorzystywania połączeń.

Jednak przyzwyczajenie do zawijania tworzenia połączenia w oświadczeniu using oznacza, że ​​nigdy nie zapomni się go zamknąć.

Jest to ogólnie dobry idiom do naśladowania - tworzenie dowolnego obiektu, który implementuje IDisposable powinny być zapakowane w using rachunku i jako takiego idiomu to jest dobry do naśladowania z połączeń, jak również.

0

Zależy od tego, czy wykracza poza zakres, czy nie. Jeśli tak się stanie, to i tak zostanie zamknięte, a następnie zwróci pulę połączeń (pod warunkiem, że tego nie wyłączyłeś). Tak więc wywoływanie w pobliżu niejawnie lub jawnie, jak to robisz, sprawia, że ​​cel jest jasny i sprawia, że ​​połączenie "natychmiast" jest dostępne do ponownego wykorzystania w puli.

Pomysł polegał na tym, aby przekonać programistów do szybkiego korzystania z bazy danych. Mnóstwo małych transakcji. Nie stary styl otwiera połączenie, a następnie ukrywa je, aby nikt inny nie mógł się do niego dostać, na wszelki wypadek, gdyby był potrzebny.

Jeśli łączenie połączeń znajduje się na klauzuli using, jest równoważne Create, open, Close. Jeśli jest wyłączona, klauzula użycia jest równoważna tworzeniu, otwieraniu, zamykaniu, usuwaniu.

W obu przypadkach prawdziwą okazją jest upewnienie się, że wykracza ona poza zakres. Poza bardzo rzadkimi okolicznościami połączenie powinno być lokalnym punktem odniesienia i mieć żywotność tego konkretnego zastosowania. Generalnie nie można utworzyć instancji w czasie wykonywania i uczynić ją właściwością mainform do intencji.