C # Linq-to-Sql - Sollte Datacontext IDisposable entsorgt werden unter Verwendung von
-
03-07-2019 - |
Frage
Ich habe mehrere Methoden, die mit DB und alle von ihnen beschäftigen beginnen durch den Aufruf
FaierDbDataContext db = new FaierDbDataContext();
Da das Linq2Sql Datacontext Objekt IDisposable implementiert, sollte dies mit „mit“ verwendet werden?
using (FaierDbDataContext db = new FaierDbDataContext()) {
// use db here
}
Was sind die Auswirkungen der Verwendung es eine oder andere Weise?
Lösung
Im Gegensatz zu den meisten Arten, die Umsetzung IDisposable, tut nicht Datacontext wirklich braucht Entsorgung - zumindest nicht in den meisten Fällen. Ich fragte Matt Warren über diese Design-Entscheidung, und hier war seine Antwort:
Es gibt ein paar Gründe, warum wir umgesetzt IDisposable:
- Wenn die Anwendungslogik muss auf eine Entität über, wenn das halten, Datacontext wird erwartet, verwendet werden oder gültig können Sie diesen Vertrag durchzusetzen durch Aufruf von Dispose. Latente Lader dass Unternehmen wird nach wie vor werden Referenzierung die Datacontext und werden versuchen, es zu benutzen Wenn jeder Code versucht die navigieren latente Eigenschaften. Diese Versuche wird versagen. Entsorgen Sie auch zwingt die Datacontext dump seinen Cache von materialisiert Einheiten, so dass ein einzelnes gecached Einheit nicht versehentlich am Leben erhalten alle Einheiten materialisiert durch diese Datacontext, die würden verursachen sonst, was ein zu sein scheint Speicherleck.
- Die Logik, die automatisch die Datacontext Verbindung geschlossen sein kann ausgetrickst in die Verbindung verlassen öffnen. Die Datacontext stützt sich auf die Anwendungscode Aufzählen all Ergebnisse einer Abfrage, da immer zu das Ende eines Suchresultates löst die Verbindung zu schließen. wenn die Anwendung verwendet IEnumerable des Movenext Verfahren anstelle eines foreach Anweisung in C # oder VB, können Sie beenden die Aufzählung vorzeitig. Wenn dein Anwendungserfahrungen Probleme mit Verbindungen nicht zu schließen und Sie vermuten, dass die automatische Schließverhalten arbeitet nicht, können Sie die Dispose verwenden Muster als eine Arbeit um.
vom Quelle
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow