SqlDataAdapter.Fill - Asynchroner Ansatz

8

Verwenden von C # / .NET 3.5.

Momentan bevölke ich 2 DataTables nacheinander mit SqlDataAdapter.Fill ().

Ich möchte beide Datentabellen gleichzeitig und gleichzeitig asynchron füllen. Allerdings gibt es keine asynchrone Version der Fill () -Methode - also BeginFill () wäre großartig!

Ein Ansatz, den ich ausprobiert habe, ist (pseudo):

  1. SqlCommand1.BeginExecuteReader // 1. Abfrage, für DataTable1
  2. SqlCommand2.BeginExecuteReader // 2. Abfrage für DataTable2
  3. SqlCommand1.EndExecuteReader
  4. SqlCommand2.EndExecuteReader
  5. DataTable1.Load (DataReader1)
  6. DataTable2.Load (DataReader2)

Allerdings dauert DataTable.Load () sehr lange:
Es dauert 3 Sekunden, um die Schritte 1 bis 4 auszuführen.
Schritt 5 dauert dann 22 Sekunden.
Schritt 6 dauert 17 Sekunden.
Also, kombiniert 39 Sekunden für die Schritte 5 und 6.

Das Endergebnis ist, das gibt mir keinen Vorteil gegenüber nur 2 SqlDataAdapter.Fills nacheinander zu tun. Ich möchte das Nettoergebnis sein, dass der gesamte Prozess nur so lange dauert wie die längste Abfrage (oder so nahe wie möglich).

Auf der Suche nach empfohlenen Möglichkeiten, um mit etwas zu enden, das wirklich ein asynchroner Ansatz zum Füllen einer DataTable ist.

Oder verwalte ich es einfach selbst und rolle zwei separate Threads, von denen jeder eine DataTable füllt?

    
AdaTheDev 21.01.2010, 11:50
quelle

2 Antworten

5

Ich würde vorschlagen, für jeden einen separaten Worker-Thread zu haben. Sie könnten ThreadPool.QueueUserWorkItem verwenden.

%Vor%     
James 21.01.2010, 11:54
quelle
1

Dies liegt daran, dass DataTable viele zu erstellende Objekte (Zeilen, Werte) enthält. Sie sollten die Ausführung des Adapters und die Auffüllung einer Datentabelle alle in einem anderen Thread durchführen und die Wartezeit bis zum Ende jeder Operation synchronisieren, bevor Sie fortfahren.

Der folgende Code wurde in Editor geschrieben und wahrscheinlich nicht einmal kompiliert, aber hoffentlich bekommen Sie die Idee ...

%Vor%     
Neil Barnwell 21.01.2010 11:54
quelle

Tags und Links