Frage

Zum Beispiel muss ich viele DataTables mit der FILL () -Methode von SQLDATAadapter füllen:

DataAdapter1.Fill(DataTable1);
DataAdapter2.Fill(DataTable2);
DataAdapter3.Fill(DataTable3);
DataAdapter4.Fill(DataTable4);
DataAdapter5.Fill(DataTable5);
....
....

Sogar alle DataAdapter -Objekte verwenden dieselbe SQLConnection. Jede Füllmethode öffnet und schließt die Verbindung, es sei denn, der Verbindungszustand ist bereits vor dem Methodenaufruf geöffnet.

Ich möchte wissen, wie sich die Öffnen und Schließen von SQLConnections unnötig auf die Leistung der Anwendung auswirkt. Wie viel muss es skalieren, um die schlechten Auswirkungen dieses Problems zu erkennen (100.000S der gleichzeitigen Benutzer?). In einer mittelgroßen Website (tägliche 50000-Benutzer) lohnt es sich, alle Aufrufe von FILL () zu stören und zu suchen, sie im Code zusammenzuhalten und die Verbindung zu öffnen, bevor ein FILG () -Aufruf () anschließend geschlossen wird?

War es hilfreich?

Lösung

ADO.NET hat Verbindungsbeamten, z. B. wenn Sie eine Verbindung schließen, ist nicht wirklich vollständig geschlossen, sondern "recycelt", wenn Sie nach einer neuen Verbindung mit genau derselben Verbindungszeichenfolge fragen.

Trotzdem - wenn Sie schon kennt Im Voraus, dass Sie diese fünf Füllmethoden einzeln anrufen müssen, würde ich auf jeden Fall empfehlen

  • die Verbindung öffnen
  • Lesen Sie alle fünf Datentabellen aus der Datenbank
  • Die Verbindung sofort erneut schließen

Es ist die beste Praxis akzeptiert, es so zu machen, es tut dir nicht weh - also mach es einfach! :-)

Marc

PS: Verbindungsbading in ado.net natürlich nur, wenn Sie es nicht ausgeschaltet haben! :-) Es ist standardmäßig eingeschaltet - Sie müssten es explizit deaktivieren.

Andere Tipps

Kernpunkt:

  • Warum Verbindungen öffnen, aufbewahren und wiederverwenden?

    Leistung

Es gibt viele Gründe, warum Sie möglicherweise Verbindungen öffnen und schließen möchten. Sie müssen entscheiden, wohin der beste Kompromiss liegt dein verwenden. Sie können beides tun: Verwenden Sie eine offene Verbindung für einen bestimmten Zeitraum und/oder eine festgelegte Anzahl von Transaktionen, schließen Sie sie dann und öffnen Sie eine neue.

Das Öffnen und Schließen von SQL -Verbindungen ist teuer im Vergleich zu anderen einfachen Aufgaben in der Datenbank. Doch wenn dein Die tatsächliche Aufgabe ist bereits zeitaufwändig, der zusätzliche Overhead wird möglicherweise nicht bemerkt (wenn Sie bereits die Wartezeit der tatsächlichen Aufgabe verbergen - klicken der Benutzer nicht zufällig auf Dinge, z. B. Wiederholung).

Testfall:

Sie können messen dein Unterschied durch das Schreiben von zwei Versionen einer Testabfrage. Wählen Sie eine einfache SQL -Aufgabe aus (muss die sein gleich in jeder Version).

In der Version eines, Machen Sie es mit einer einzigen konstanten offenen Verbindung außen Die Schleife, die durch Ihre einfache Aufgabe x Häufigkeitsfeuchtigkeitsschleife ist.

In dem zweite, Tun Sie es mit der Öffnung und Schließung der Verbindung Innerhalb die Schleife.

Ändern Sie die x -Häufigkeit zu entsprechen dein Nutzung und Erwartungen. Das sollte Ihnen ein wirklich gutes Gefühl für die Auswirkungen haben dein System.

Hoffe das hilft dir, die Grundlagen zu verstehen ... Jack.

Necro -Antwort: Der beste Weg besteht darin, die Verbindung in eine "Verwenden" -Anweisung so zu stecken, dass sie an die Arbeit skopiert wird, die sie ausführen muss:

using (SqlConnection conn = new SqlConnection())
{
    DataAdapter1.Fill(DataTable1);
    DataAdapter2.Fill(DataTable2);
    DataAdapter3.Fill(DataTable3);
    DataAdapter4.Fill(DataTable4);
    DataAdapter5.Fill(DataTable5);
    ...
    ...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top