2016-07-18 8 views
0

Ich habe einen lang laufenden .NET-Prozess (ein Windows-Dienst), der mit einem SQL Server kommuniziert.Soll ich jedes Mal eine brandneue SqlConnection erstellen oder versuchen, eine bestehende Verbindung jedes Mal neu zu öffnen?

Ursprünglich habe ich eine Verbindung geöffnet, als der Dienst gestartet wurde, und es einfach offen gehalten. Gelegentlich würde jedoch ein Netzwerk-Hiccup oder ein Neustart des SQL-Servers diese Verbindung unterbrechen, und mein Prozess würde dies nicht wissen. Es würde versuchen, weiterhin SQL gegen eine geschlossene Verbindung zu werfen.

Der Versuch, eine offene Verbindung aufrechtzuerhalten, war eindeutig, dass ich versuchte, zu schlau zu sein. Also, ich:

  1. erstellen (und offen) ein neues SqlConnection Objekt jedes Mal
  2. die Verbindung erstellen einmal auf Service Start-up, und versuchen, nur um wieder zu öffnen, um die Verbindung jedes Mal

Für letztere (# 2), habe ich diesen Code:

if(connection.State != ConnectionState.Open) 
{ 
    connection.Open(); 
} 

ich muss dies nur tun, weil die Verbindung ist bereits vorhanden. Wenn ich die Verbindung jedes Mal frisch erstellt habe (# 1), wäre es eindeutig geschlossen und ich müsste es öffnen.

Was ich hoffe Vorteil von SQL Connection-Pooling zu tun nehmen ist tatsächlich nicht eine neue Verbindung, jedes Mal öffnen, aber lassen Sie einfach die Verbindung Pool dass verwalten - mir eine offene Verbindung geben, wenn es einen hat, oder öffnen Sie eine neue, wenn nicht.

Um dies zu erreichen, ist es wichtig, wenn ich die Verbindung jedes Mal neu erstellen (# 1), oder wenn ich einfach eine Verbindung wiederverwende und versuche, sie jedes Mal wieder zu öffnen (# 2)?

+0

Mögliches Duplikat von [Ist es am besten, eine offene SqlConnection als Parameter zu übergeben oder in jeder Methode eine neue aufzurufen?] (Http://stackoverflow.com/questions/9807268/is-it-best-to-to- pass-a-open-sqlconnection-as-a-parameter-oder-call-a-new-one-in-ea) –

Antwort

1

Verbindungspooling bedeutet, dass, selbst wenn Sie (1) unter der Haube, das Framework (2) für Sie für eine bessere Leistung tun. Sie können also jederzeit eine neue Verbindung erstellen.

Es ist erwähnenswert, dass das Pooling für die meisten Fälle nur für identische Verbindungszeichenfolgen gilt. Wenn Sie also bestimmte Optionen ändern, werden diese Verbindungen möglicherweise nicht gepoolt.

Verwandte Themen