2010-08-11 12 views
10

In einer C# -Anwendung sollte ein OleDBConnection einmal erstellt werden, oder jedes Mal, wenn eine SQL-Anweisung ausgeführt wird?In einer C# -Anwendung sollte eine DB-Verbindung einmalig oder bei jeder SQL-Anweisung erstellt werden?

Ich sehe C# -Code von jemand anderem geschrieben. Vor jeder SQL-Anweisung wird ein Objekt OleDbConnection erstellt, dessen Verbindungszeichenfolge auf eine MDB-Datenbank verweist.

Ist es angebracht, jedes Mal ein OleDbConnection-Objekt zu erstellen, oder sollte das Objekt am Anfang der Anwendung erstellt und von da an verwendet werden?

+1

Welche Art von Anwendung (Forms, ASP.NET etc) und welche Art von Architektur (SOA usw.) verwenden Sie - nach David, wird es abhängen. – StuartLC

Antwort

3

Es hängt von der Situation ab.

Wenn Sie vorhaben, mehrere Anweisungen in einer Zeile zu der Ausführung, dann sind Sie besser dran, Performance-weise es einmal zu öffnen, führen Sie alle Anweisungen, und schließen Sie es dann,

Wenn Sie Nach dem Öffnen der Verbindung fragen, wenn das Programm startet, und es offen halten, bis das Programm geschlossen wird, unabhängig davon, was vor sich geht. Schließen Sie es, sobald Sie damit fertig sind. Es ist besser, keine Verbindung offen zu lassen. Ein anderer Faktor, an den die Leute nie zu denken scheinen, ist der Wartungsprogrammer, der später mitläuft, der den Code verfolgen und verfolgen muss, wo die Verbindung geöffnet ist und wann sie geschlossen wird. Nehmen wir beispielsweise an, Sie haben ein Programm, das auf eine Datenbank zugreift und dann in mehrere andere Funktionen verzweigt, von denen jede die Verbindung benötigt. Dieses Zeug im Code zu verfolgen ist ein Albtraum.

Dieser Faktor ist jedoch sekundär zu ordnungsgemäßem Betrieb und Leistung, aber immer noch etwas in einer komplexen App zu berücksichtigen.

Der Hauptfaktor ist, wie sich dies auf die Leistung auswirkt, im Gegensatz zu dem Zweck, eine Verbindung offen zu halten. Sie müssen das in jeder Situation entscheiden.

0

Sie sollten eine Verbindung jedes Mal öffnen, wenn Sie etwas von der db benötigen und schließen Sie es danach. Verlassen Sie den Verbindungspool, um zu entscheiden, wann die Verbindung physisch geschlossen wird.

7

Nach Best Practices for Using ADO.NET:

Hochleistungsanwendungen Verbindungen zur Datenquelle halten im Einsatz für eine minimale Menge an Zeit als auch als Vorteil der Leistung nehmen Technologie wie Connection Pooling verbessert ...

6

Angenommen, Verbindungspooling ist für Ihre Datenbank verfügbar, was wahrscheinlich ist, dass Sie eine Verbindung öffnen und schließen möchten für jeden Anruf in Ihre Datenbank. Dadurch können Sie die endliche Ressource einer Datenbankverbindung nur dann verwenden, wenn Sie sie benötigen, und sie dann an den Pool zurückgeben, damit andere Anrufer sie verwenden können, sobald Sie den Anruf beendet haben. Wenn Sie an der Verbindung festhalten, werden Sie bald die endliche Ressource, also die insgesamt verfügbaren Verbindungen zur Datenbank, verlassen und somit die Skalierbarkeit und Leistungsfähigkeit Ihrer Anwendung erheblich beeinträchtigen.

ich in der Regel eine using-Anweisung verwenden, die Verbindung ist in der Nähe nach dem Gebrauch zu gewährleisten - siehe unten:

using (ODBCConnection c = new ODBCConnection(ConnectionString)) 
    { 
    c.Command.CommandType = CommandType.Text; 
    // make a call 
    } 

Viel Spaß!

1

Ihre Verbindung zur Datenbank sollte nur geöffnet sein, während Sie Aktivitäten direkt in der Datenbank ausführen. Wenn Sie eine offene Verbindung zur Datenbank aufrechterhalten, während Ihre Anwendung andere Aktivitäten ausführt, können andere Benutzer den Zugriff auf die Datenbank blockieren, sobald der Verbindungspool das Limit erreicht.

Wenn Sie auf dem Client-PC eine rechenintensive Funktion ausführen müssen, sollten Sie diese Aufgabe ausführen, nachdem Sie die Verbindung getrennt haben, damit die Verbindung nicht getrennt wird.

Wenn Sie jedoch eine Reihe von Datenbankfunktionen ausführen müssen, kann die Leistung Ihres Clients verbessert werden, indem Sie diese gemeinsam in einer einzigen offenen Verbindung ausführen.

Verwandte Themen