Sehr interessantes PDF zum Thema Ressourcen schonen

Ich habe gerade dieses PDF gelesen: http://www.veloursnebel.de/Artikel/Ressourcen_schonen.pdf

Es ist sehr interessant und behandelt die Frage, wie man Datenbankverbindungen in .Net behandeln sollte. Meine Hauptfrage, weshalb ich momentan suche ist: Sollte man in einer Desktopanwendung die Datenbankverbindung einmal öffnen und dann wiederverwenden, oder sie jedesmal öffnen und schließen. Was ist sauberer? Was ist Performanter? Und lohnt sich der Performancegewinn überhaupt?

Ein Fakt, der in dem PDF genannt wird ist, dass das .Net Framework standardmäßig ConnectionPooling einsetzt. Das heißt, es wird eine Anzahl Verbindungen geöffnet und diese werden geteilt. Dadurch geht das Öffnen einer Datenbankverbindung schneller. Beim Schließen der Verbindung wird diese nur freigegeben.

Ein weiterer Punkt ist, dass man sauberer Programmieren kann, wenn man die Verbindung jedesmal wieder schließt. Man kann und sollte das Using Schlüsselwort nutzen, um sicherzustellen, dass die Verbindung geschlossen wird. Im Beispiel im PDF kann leicht sehen, wie Using funktioniert. Ich möchte das Beispiel hier nochmal zeigen, aber etwas abändern. Der Autor hat sich auf die Datenbankverbindungen konzentriert. Der Datenbankbefehl und der DataReader werden allerdings immernoch nach dem alten Muster mit Close() geschlossen. Konsequenterweise, um alle Ressourcen freizugeben, sollte man meiner Meinung nach auch hier ein Using einsetzen.

using (OdbcConnection sqlConn = new OdbcConnection()){
    using (sqlCmd = new OdbcCommand(sql, sqlConn)){
        sqlConn.Open();
        using (OdbcDataReader sqlReader = sqlCmd.ExecuteReader()){
            while (sqlReader.Read()){
                Console.WriteLine(sqlReader["ID"]);
            }
       }
}

Der Vorteil des hier gezeigten Beispiels ist, dass alle Ressourcen wieder geschlossen werden. Ein Nachteil ist, wenn man using nicht wirklich kennt, dann sieht man nicht direkt, dass diese geschlossen werden. Außerdem wird der Code durch die zusätzlichen Blöcke weit eingerückt.

Was meint ihr?

Advertisements