2010-12-16 6 views
14

Kann mir jemand kurz wie ich Verbindung Pooling in ADO.Net zu tun, muss ich eine Verbindung zu 3 separaten Datenbanken. 2 von ihnen sind in demselben Server und der andere in einem separaten Server.C# SQLConnection Pooling

besser mit Code snipts ..

Antwort

13

solange sind Sie genau haben würden, den Standard (für sQL-Server zumindest) ist, dass es einfach automatisch arbeiten. In Ihrem Beispiel könnten Sie nur 3 zugrunde liegende Verbindungen haben (eine pro Verbindungszeichenfolge).

Aber immer sicherzustellen, dass Ihre Verbindungen angeordnet sind, idealerweise mit using:

using(var conn = new SqlConnection(connectionString)) { 
    // use conn 
} 

dann wird es zurück in den Pool freigegeben (für wiederverwenden, wenn die gleiche Verbindungszeichenfolge als nächste zu sehen ist), selbst wenn Eine Ausnahme wird ausgelöst.

Zu deaktivieren Pooling (wenn Sie wählen), enthalten Pooling=false; in der Verbindungszeichenfolge.

7

Sie müssen vor allem nicht konfigurieren oder setzen alles, lassen Sie es die meisten Probleme passieren ... ich gesehen habe von Folk verursacht werden nicht Schließen von Verbindungen oder zu klug sein

die Pools pro Verbindungszeichenfolge erstellt werden, so dass Sie Ihre Verbindungen zu entsorgen drei in diesem Fall

+0

drei Verbindungen oder zwei Verbindungen ?? –

+1

Eine pro Verbindungszeichenfolge. Selbst wenn sich zwei auf demselben Server befinden, unterscheiden sich die Verbindungszeichenfolgen durch unterschiedliche Datenbanken. –

5

Bestimmte Anbieter tun nicht bieten Verbindungspooling. Zu meinem Wissen schließt das Verbindungszeichenfolgen zu Microsoft Access-Datenbanken (Jet) und SQL Server CE (Compact Edition) ein.

Der Mangel an Verbindungspooling für diese macht Datenbankzugriff erheblich langsamer.

Eine Lösung für das fehlende Jet-Pooling war für mich immer eine einzige Verbindung zur Jet-Datenbank, die für die gesamte Programmlebensdauer geöffnet war (im Gegensatz zur empfohlenen Technik). Dies beschleunigte meine Jet-Access-Datenbank SQL-Abfragen von .NET-Anwendungen enorm, aber funktioniert auch nur auf lokalen Jet-Datenbanken; Für Jet-Datenbanken in Netzwerkfreigaben bekomme ich relativ schnelle Ausnahmen von zu vielen offenen Dateigriffen.

Für SQL Server CE habe ich bisher keine Lösung gefunden.