2016-03-31 2 views
0

Ich habe einen Block von Code, der alle ~ 0,25 Sekunden ausgeführt wird. Es funktioniert gut für die ersten zehn Iterationen, bis es mit einem Fehler "Datareader, der bereits mit dieser Verbindung verbunden ist" abstürzt, trotz der Tatsache, dass ich den Datenleser schließe, der jedes Mal verwendet wird. Könnte die Geschwindigkeit der Anfragen dies verursachen? Ich habe es alle 1,5 Sekunden verlangsamt und es ist immer noch passiert. Diese Verbindung wird nirgendwo sonst benutzt, um diesen Block zu blockieren, also bin ich mir nicht sicher, warum das passiert.Sql Datenreader bereits zugeordnet Hochfrequenz-Polling

  MySqlCommand cmd = new MySqlCommand(QueryString, connection); 
      var dataReader = cmd.ExecuteReader(); 
      var dt = new DataTable(); 
      dt.Load(dataReader); 
      dataReader.Close(); 
      dataReader.Dispose(); 
      cmd.Dispose(); 
+0

Was löst den Timer aus? z.B. Handelt es sich um verschiedene Threads? Versuchen Sie auch, das Einwegmuster zu verwenden. – Caramiriel

+0

Zuerst verwenden Sie 'using (...) {...}' Anweisungen, um die Disposition zu tun. Und fügen Sie einen für die Verbindung hinzu. –

Antwort

0

Höchstwahrscheinlich werden zwei Operationen gleichzeitig ausgeführt. Da Sie für jede dieselbe Verbindung verwenden, tritt ein Problem mit dem gemeinsamen Zugriff auf. Standardmäßig unterstützt eine Verbindung nur einen einzigen geöffneten Cursor. Alles was passieren muss, ist, dass die DB-Abfrage länger dauert als das Timer-Intervall.

Fügen Sie die Synchronisierung hinzu, um sicherzustellen, dass zwei Anforderungen nicht gleichzeitig ausgeführt werden. Wenn bereits eine Anforderung ansteht, kehren Sie einfach sofort zurück.

Stellen Sie außerdem sicher, dass entsprechend finallyusing und try ... verwenden - es ist möglich, dass eine Ausnahme vom Laufen der dataReader.Dispose() verhindert, was die Verbindung hält nicht in der Lage alle neue Cursor zu öffnen, bis der Leser durch die GC entsorgt wird und Finalizer.

0

Verwenden Sie eine andere Verbindung für den Datenreader und ExecuteNonQuery

Verwandte Themen