Unbehandelte Ausnahme: System.InvalidOperationException: Der Timeout ist abgelaufen. Die Auszeit ist abgelaufen, aber die Verbindung wurde noch nicht aus dem Pool genommen. Dies könnte daran liegen, dass alle Poolanschlüsse genutzt sind und die maximale Poolgröße erreicht wurde.
Dies kann passieren, weil alle Poolanschlüsse genutzt werden und die maximale Poolgröße erreicht wird.
Lösung:
Das Erste, was wir tun müssen, ist, die Verbindung sofort zu schließen, sobald wir sie benutzen. Wenn die Verbindung nicht geschlossen ist, wird die Verbindung im Verbindungspool gespeichert und der GC ist als zerstört. In diesem Fall denkt man, dass der Verbindungspool den Maximalwert nicht erreicht hat, aber tatsächlich hat der Verbindungspool den Maximalwert erreicht; zweitens können wir die maximale Poolgröße = N im Verbindungsstring verwenden; um die maximale Anzahl der Verbindungen im Verbindungspool dynamisch zu erweitern.
Illustrieren:
Das heißt, wenn der Wert der maximalen Poolgröße in der connectionString nicht angegeben ist,Dann gilt die maximale Poolgröße=100Wenn die Anzahl der Besucher in der Datenbank 101 beträgt, erscheint der obige Fehler, wenn nach dem Warten auf die von SqlConnection.ConnectionTimeout festgelegte Zeit (standardmäßig 15 Sekunden) keine Verbindung verfügbar ist.
Wenn wir setzen:
Wenn die Anzahl der Besucher, die sich gleichzeitig mit der Datenbank verbinden, 513 beträgt, tritt der obige Fehler auf, wenn nach dem Warten auf die von SqlConnection.ConnectionTimeout festgelegte Zeit weiterhin keine Verbindung verfügbar ist (standardmäßig 15 Sekunden).
|