Wie meine vorherige Frage: Wie man mit der Datenbank verbunden bleibt bis Bildschirm schließen?
Zuerst möchte ich mich bei Ihnen entschuldigen, dass ich meine Situation nicht erkläre.
Nun, meine Situation ist update bis zu hundert Datensätzen. Ich erstelle mit For loop
eine echte Arbeit und protokolliere deren Ergebnis.
Hier ist eine Leistungsklasse.
%Vor%Und das sind Log-Ergebnisse
%Vor%Ich wurde mit Verbindungspooling geübt. Aber diese Ergebnisse, die gezeigt werden, bleiben mit der Datenbank verbunden sind schneller in vielen Aufzeichnungen Situation.
Gibt es irgendeine Praxis, die für diesen Fall geeignet ist?
BEARBEITEN: 21.02.2017
Hier ist eine offene Verbindung bei geöffnetem Formularcode:
%Vor%Aktualisierungscode:
%Vor%Und entsorgen Sie die Verbindung beim Beenden
%Vor%Vom Standpunkt der Reaktionsfähigkeit eines einzelnen Threads wird das Offenhalten der Verbindung schneller sein. Der Zweck des Verbindungspoolings besteht darin, die Kosten für das Öffnen neuer Verbindungen zu reduzieren, indem sie für Threads freigegeben werden, während gleichzeitig keine übermäßige Anzahl von Verbindungen auf dem gemeinsam genutzten SQL Server verbraucht wird.
Jedes Mal, wenn eine Verbindung zum Verbindungspool freigegeben und dann wiederverwendet wird, wird der Protokollstapel einen Aufruf von sp_resetconnection aufrufen, um den Status auf dem Server zu bereinigen. Sie können dies sehen, indem Sie eine Profiler-Ablaufverfolgung für den SQL Server ausführen.
Da jeder Prozess über einen eigenen Verbindungspool für jede Verbindungszeichenfolge verfügt, profitieren Sie nur dann vom Verbindungspooling, wenn Konflikte für die Verbindungen innerhalb eines Prozesses bestehen.
Der Teil, den alle hier vermissen, ist das Windows CE . Es ist nicht ungewöhnlich, dass Opening Connections auf der Compact Edition wirklich langsam sind.
Aber diese Zeiten sehen ein bisschen übertrieben aus. Siehe diese QA für Problemumgehungen: Wie kann ich meine SQL Server CE-Verbindung öffnen? schneller?
Es gibt eine Reihe von Bereichen, in denen Sie Probleme mit dem obigen Code haben können.
SqlConnection
-Instanz. Die Klasse SqlConnection
wird automatisch Verbindungen unter den Covern zusammenfassen. Wenn Sie die Funktion close()
aufrufen, geht die Verbindung einfach in den Pool zurück. Sie können das Poolingverhalten mit Eigenschaften in der Verbindungszeichenfolge steuern. Wenn Sie für alle Ihre Funktionen dasselbe Verbindungsobjekt beibehalten, erzwingen Sie deren Serialisierung.
Hier ist ein Verweis auf einige Verbindungszeichenfolgeneigenschaften . Schauen Sie sich Connection Lifetime
an.
Ich würde die SqlConnection
Instanz aus der form_load()
Funktion entfernen und ScanUpdate
wie folgt schreiben:
Achten Sie bei Ihren *_Click
-Ereignishandlerfunktionen darauf, zu überprüfen, ob das Ereignis erneut aufgerufen werden muss:
Weitere Informationen zur Ereignisbehandlung finden Sie in dieser Antwort .
Tags und Links sql-server c# visual-studio-2008 compact-framework windows-ce