Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server- und .NET-Speichereinschränkungen, -zuordnungen und -bereinigung

Das Problem ist, dass Ihr DataReader aus irgendeinem Grund nicht geschlossen wird. Eine Ausnahme? Der Methodenbenutzer hat nicht daran gedacht, den DataReader zu schließen?

Eine Funktion, die einen DataReader zurückgibt, der außerhalb ihres Körpers verwendet werden soll, überlässt die Verantwortung für das Schließen dem äußeren Code, sodass es keine Garantie dafür gibt, dass der Reader geschlossen wird. Wenn Sie den Reader nicht schließen, können Sie die Verbindung, in der er geöffnet wurde, nicht wiederverwenden.

Also ist es eine sehr schlechte Idee, einen DataReader von einer Funktion zurückzugeben!

Eine ganze Diskussion zu diesem Thema finden Sie unter hier .

Suchen Sie nach der Verwendung dieser Funktion (GetDataReader ) und überprüfen Sie, ob garantiert ist, dass der Reader geschlossen wird. Und am wichtigsten ist, dass es keine Möglichkeit gibt, dass dieser Code erneut eintritt und dieselbe Sammlung verwendet, um einen neuen DataReader zu öffnen, bevor der erste geschlossen wird. (Lassen Sie sich nicht von CommandBehavior.CloseConnection täuschen. Dies sorgt nur dafür, dass die Verbindung geschlossen wird, wenn der DataReader geschlossen wird ... nur wenn Sie es nicht versäumen, ihn zu schließen)