Mit C# / .NET 3.5.
Derzeit fülle ich 2 DataTables eine nach der anderen mit SqlDataAdapter.Fill().
Ich möchte diese beiden Datentabellen parallel und gleichzeitig auffüllen, indem ich jede einzelne asynchron ausführe. Allerdings gibt es keine asynchrone Version der Fill()-Methode - d.h. BeginFill() wäre toll!
Ein Ansatz, den ich ausprobiert habe, ist (pseudo):
- SqlCommand1.BeginExecuteReader // 1. Abfrage, für DataTable1
- SqlCommand2.BeginExecuteReader // 2. Abfrage, für DataTable2
- SqlCommand1.EndExecuteReader
- SqlCommand2.EndExecuteReader
- DataTable1.Load(DataReader1)
- DataTable2.Load(DataReader2)
DataTable.Load() benötigt jedoch viel Zeit:
Die Ausführung der Schritte 1 bis 4 dauert 3 Sekunden.
Schritt 5 dauert dann 22 Sekunden.
Schritt 6 dauert 17 Sekunden.
Also, 39 Sekunden für die Schritte 5 und 6 zusammen.
Das Endergebnis ist, dies gibt mir keinen Vorteil über gerade tun 2 SqlDataAdapter.Fills, eine nach der anderen. Ich möchte das Nettoergebnis zu sein, dass der gesamte Prozess nur so lange wie die längste Abfrage (oder so nah wie möglich) dauert.
Auf der Suche nach empfohlenen Wege nach vorn, um am Ende mit etwas, das wirklich eine asynchrone Ansatz zum Füllen einer DataTable ist.
Oder muss ich nur verwalten es selbst und rollen 2 separate Threads, jeder eine DataTable füllen?