kaktusgruen:das Problem ist, dass ich die Verbindung nicht einfach schliessen kann.
Doch!
Wie ich bereits schrieb,
Connection.Close() oder
Conncetion.Dispose() (welches implizit
Close aufruft) schließen nicht die physikalische Verbindung. Sie sind nur ein
Hinweis für den Connection-Pool dass diese Verbindung(mit diesem ConnectionString) genutzt werden kann. Sollte ein Benutzer Hans Wilhelm nun die Seite aufrufen könnte er diese physikalische Verbindung nutzen. Da Du sie aber nicht geschlossen hast, geht der Conncection-Pool davon aus dass sie nicht genutzt werden kann. Also wird eine neue physikalische Verbindung zur Datenbank hergestellt für Hans Wilhelm(einfach mal
hier den ersten Abschnitt lesen warum das zeitaufwendig ist).
Ich
hab hier mal was zu dem Thema geschrieben. Deine Methode wird ganz sicher zu Perfomanceproblemen führen und mit ziemlicher Sicherheit früher oder später die unterschiedlichsten, nicht reproduzierbaren Fehler hervorrufen ;-)
kaktusgruen:... da manchmal in einer einzigen Methode mehrere
Statements an die DB abgesetzt werden.
Natürlich brauchst Du in einer Methode nicht für jedes statement (SqlCommand etc.) eine eigene Connection erzeugen, aber spätestens am Ende der Methode sollte sie wieder disposed werden (
using-statement nutzen!).
kaktusgruen:Vielleicht sollte ich noch
erwähnen, dass die Session Variable global im ganzen Projekt verfügbar
ist. So habe ich nur eine einzige Verbindung zur DB pro User für die
gesamte Dauer seiner Session.
Der nächste Trugschluss. Im Hintergrund kann der Connection-Pool schon lange dazu gezwungen worden sein 100 physikalische Verbidnungen zu öffnen, spätestens wenn die 100. Session existiert. Und kein UserB könnte die verbindung von UserA benutzen selbst wenn dieser gar nicht mehr mit der Applikation arbeitet. Würde man sie immer sofort "schliessen", könnte eventuell sogar eine physikalische Verbindung für 100 Benutzer reichen da der Pool sie automatisch zuweist.
Gruß
