___ answer247258 ___

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.

    
___ answer247254 ___

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.

    
___ answer247287 ___

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.

    
___ answer247667 ___

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

    
___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ tag123adonet ___ ADO.Net wird häufig von Programmierern verwendet, um auf Daten in relationalen Datenbanksystemen zuzugreifen und diese zu ändern. Es kann jedoch auch auf Daten in nicht relationalen Quellen zugreifen. Es ist ein Teil der Basisklassenbibliothek, die in Microsoft .NET Framework enthalten ist. ___ qstntxt ___

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?

    
___ answer247805 ___

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)

    
___ answer247293 ___

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.

    
___

8

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?

    
tom.dietrich 29.10.2008, 15:28
quelle

6 Antworten

21

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.

    
Corbin March 29.10.2008, 15:40
quelle
5

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.

    
Mark S. Rasmussen 29.10.2008 15:30
quelle
4

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.

    
jonnii 29.10.2008 15:29
quelle
1

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.

    
faulty 29.10.2008 15:39
quelle
1

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

    
Cade Roux 29.10.2008 17:22
quelle
0

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)

    
Ian Boyd 29.10.2008 18:05
quelle

Tags und Links