Die Lösung ist einfach: Jeder muss nur hinter sich aufräumen. Die ADO.NET-Verbindungsklasse enthält eine Close-Methode, um alle Verbindungen, die man geöffnet hat, ordnungsgemäß wieder zu schließen. Es ist hilfreich, sich die Open– und Close-Methoden als zusammengehörig vorzustellen. Hier ist eine kurze Übersicht über die Methoden, die man hinsichtlich des Aufräumens von Datenbankverbindungen in Betracht ziehen sollte:
- Open: Eine Datenbankverbindung wird geöffnet.
- Close: Eine Datenbankverbindung wird geschlossen.
- Dispose: Alle Ressourcen, die mit der Datenbankverbindung zusammenhängen, werden freigegeben. Diese Methode erzwingt eine Garbage Collection für das jeweilige Objekt. Daher kann sie dafür benutzt werden, sicherzustellen, dass keine Ressourcen blockiert werden, nachdem die Verbindung benutzt wurde. Außerdem ruft die Dispose-Methode einer Verbindung automatisch deren Close-Methode auf. Dennoch kann man die Close-Methode immer vor Dispose aufrufen. Ein Ausnahmefehler wird ausgelöst, wenn die Dispose-Methode eines Objekts mehrmals aufgerufen wird.
- State: Der Status des Verbindungsobjekts wird zurückgegeben. Man sollte prüfen, ob eine Verbindung offen ist, bevor man sie schließt.
Ein Beispiel zur Verwendung dieser Methoden ist der VB.NET-Code in Listing A unten. Listing B enthält den entsprechenden C#-Code. Man kann den Code als Overkill betrachten, aber alle Objekte in Verbindung mit der Datenbank werden geschlossen, gelöscht und wieder freigegeben, so dass für die automatische Garbage Collection bei dieser Vorgehensweise nichts übrig bleibt.
Listing A – VB.NET
Listing B – C#.NET
Eine verbreitete Lösung für das Problem offener Verbindungen besteht darin, nur ein einziges Verbindungsobjekt zu verwenden, das von jeder Methode, Klasse oder Subroutine, die die Datenbankoperationen erfordert, geöffnet und geschlossen wird. Die Objekte existieren häufig in einer Singleton-Datenbankzugriffsklasse, welche die Verbindungen zentral verwaltet.
Die Dateien nicht vergessen
Das Problem, dass Verbindungen nicht ordentlich geschlossen werden, ist nicht auf Datenbankzugriffe beschränkt. Es besteht auch, wenn mit Dateien oder irgendeiner Art von Stream-Objekten gearbeitet wird. Ein gutes Beispiel dafür ist das Schreiben von Daten in eine Textdatei. Der C#-Schnipsel in Listing C erzeugt eine Textdatei und fügt etwas Text ein.
Listing C – VB.NET
Wichtig ist, daran zu denken, die Datei zu schließen, sobald das Einfügen von Daten abgeschlossen ist. Selbst wenn es nicht extra erwähnt werden muss, das Problem schleicht sich auch in Produktionsapplikationen ein. Den entsprechenden VB.NET-Code zeigt Listing D.
Listing D – C#.NET
Darauf achten, was man tut
Die Tage von Speicherlecks und den damit verbundenen Problemen mit Microsoft-Technologien mögen schon lange vorbei sein, aber die .NET-Plattform ist nicht immun gegen Probleme. Ein verbreitetes Problem ist der Verbrauch von System- und Datenbankressourcen, weil Entwickler vergessen aufzuräumen, nachdem sie mit einer Datenbank gearbeitet haben. Entwickler können solche Probleme vermeiden, indem sie Objekte nach ihrer Nutzung wieder freigeben. Und die ADO.NET-Objekte enthalten Close– und Dispose-Methoden, um einem die Sache leichter zu machen.
Neueste Kommentare
Noch keine Kommentare zu Die Performance von .NET verbessern
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.