Entwickler-Ecke

Datenbanken (inkl. ADO.NET) - SQL CE Verbindung - Timeouts/Dauerverbindung?


garv3 - So 30.08.09 22:01
Titel: SQL CE Verbindung - Timeouts/Dauerverbindung?
Hallo zusammen,

ich frage mich momentan, ob es sinnvoller ist, eine SqlCeConnection einmal bei Programmstart zu öffnen und erst beim Beenden zu schließen, oder ob man lieber immer eine Verbindung öffnen sollte, wenn man sie gerade braucht.
Was für eine Dauerverbindung spräche, wäre das Wegfallen eventueller Verzögerungen.
Dagegen könnten Probleme wie z.B. Timeouts o.ä. sprechen. Gibt es irgendwelche Probleme/Einschränkungen im Zusammenhang mir lange (bis zu 48h) geöffneten Verbindungen?
Es ist in meinem speziellen Fall jedenfalls sichergestellt, dass kein anderer Prozess auf die DB zugreift.

Was meint ihr?

Dank und Gruß
garv3


ene - Mo 31.08.09 08:00

Moin,

normalerweise verwende ich keine persistenten Verbingungen, die einzige Ausnahme stellen bei mir ODBC-Verbingungen zu MySQL dar. Bei diesen Verbingungen kann der Verbindungsaufbau selber schon zu längeren Öffnungszeiten führen, weswegen ich die Connection geöffnet lasse. Bei einem MS SQL-Server / Oracle konnte ich so etwas noch nicht nachvollziehen, sondern schließe meine Verbindungen immer gleich, nachdem ich die Datenmanipulation oder Sammlung abgeschlossen habe.

Für den Einzelfall kann eine persistente Verbindung Vorteile bieten, allerdings im Performancebereich. Dafür kann diese Verbindung auch Nachteile beim Locking haben. Ist die Performance denn so schlecht?


garv3 - Mo 31.08.09 22:59

Wirklich schlecht ist die Performance nicht. Manchmal kommt es zu kleineren Verzögerungen (vielleicht 0,1 Sekunden).
Die spürt man schon. Sind aber nicht unbedingt tragisch. Wäre nur schöner, wenn es sich wirklich flüssig anfühlen würde.

Zu welchen Problemen kann es denn kommen, wenn ich die Verbindung nicht schließe? Gibt es soetwas wie timeouts?


ene - Di 01.09.09 06:59

Das Locking ist der Nachteil. Die Datensätze, die du in der Connection geöffnet hast, sind erstmal gesperrt. Und wenn deine Connection nicht abgebaut wird, werden sie auch nicht freigegeben. Bei Transaktionen verhält es sich ähnlich.

Der Timeout ist dabei egal, denn eine persistente Verbinung baut sich ja selber wieder auf.


garv3 - Mi 02.09.09 13:24

Alles klar. Danke!