Es gibt keinen großen Overhead, da Pools standardmäßig im Verbindungspool gespeichert werden. Wenn Sie also eine Verbindung öffnen, erhalten Sie oft eine fertige Verbindung aus dem Pool. Das Erstellen von SqlConnections hat mir keine Probleme bereitet.
Wenn Sie die gleiche Verbindungszeichenfolge verwenden, werden Ihre Verbindungen gepoolt. Sie sollten nur so lange eine Verbindung geöffnet haben, wie Sie sie benötigen.
Ich hatte den gleichen Gedanken, also benutzte ich die gleiche Verbindung in einer engen Schleife, um zu verhindern, dass ich eine andere instanziieren musste, wenn ich sie brauchte. Aber manchmal ist es schwer, den Überblick zu behalten und zu debuggen. Wenn Sie einen DataReader von der Verbindung trennen und dann versuchen, einen anderen zu starten, während derselbe Reader noch aktiv ist, erhalten Sie eine Ausnahme. Also, ich würde es nur empfehlen, wenn es wirklich häufig wie eine enge Schleife ist, sonst ist es die Mühe nicht wert.
Dies ist im Allgemeinen keine gute Sache (Sie könnten ein Leck verursachen und schließlich keine Verbindungen mehr haben), sondern verlassen sich stattdessen auf den Verbindungspool für die Leistung und öffnen Verbindungen nach Bedarf und schließen Verbindungen so schnell wie möglich.
Bill Vaughn hat eine Reihe nützlicher Artikel über Verbindungspooling und Datenzugriff einschließlich diesem
Es scheint, als ob viel Aufwand beim schnellen Öffnen und Schließen von SQL-Verbindungen anfällt. Soll ich eine Verbindung bestehen lassen (eine, pro Client, pro Datenbank), oder ein neues sqlconnection-Objekt immer dann deklarieren, wenn ich es brauche, und dafür sorgen, dass ich nach mir aufräume?
Was hast du getan? Was hat gut funktioniert und was hat schlecht funktioniert?
Jahrelang haben wir den Client eine einzige persistente Verbindung zur Datenbank behalten. Das Problem tritt auf, wenn ein unterbrochener Verbindungsfehler erkannt und die Verbindung ordnungsgemäß wiederhergestellt wird. Oftmals werden Sie nicht wissen, dass eine Verbindung fehlgeschlagen ist, bis Sie versuchen, sie zu verwenden (d. H., Ein select wird einen 'Allgemeinen SQL-Fehler' auslösen)
Wir verwenden jetzt eine global verfügbare statische Klasse, deren Aufgabe es ist, Ihnen eine neue Verbindung zur Datenbank zu geben, und wenn Sie damit fertig sind, verwenden Sie dieselbe Klasse, um die Verbindung loszuwerden.
%Vor%Wir tun dies, weil eine Initialisierung erforderlich ist, wenn wir eine Verbindung zur Datenbank herstellen (wir speichern Informationen in CONTEXT_INFO von SQL Server und müssen diese Informationen beim Trennen der Verbindung leeren)
In den meisten Fällen übernimmt das .NET-Verbindungspooling dies für Sie. Auch wenn Sie Verbindungen über Code öffnen und schließen, passiert das nicht hinter den Kulissen. Wenn Sie eine Verbindung instanziieren und öffnen, sucht .NET nach einer vorhandenen Verbindung im Verbindungspool mit der gleichen Verbindungszeichenfolge und gibt Ihnen stattdessen diese Verbindung. Wenn Sie die Verbindung schließen, wird sie zur zukünftigen Verwendung im Verbindungspool wiederhergestellt.
Wenn Sie SQL Server verwenden: Ссылка
OLE DB, ODBC, Oracle: Ссылка
Dino Esposito Artikel: Ссылка
Sie können das standardmäßige Pooling-Verhalten mit Verbindungszeichenfolgenname / -werten überschreiben: Ссылка . Sehen Sie sich die zweite Tabelle der Einstellungen an, die 'Connection Lifetime' enthalten.