【发布时间】:2010-01-21 11:50:06
【问题描述】:
使用 C#/.NET 3.5。
目前我正在使用 SqlDataAdapter.Fill() 一个接一个地填充 2 个数据表。
我想并行填充这两个数据表,同时通过异步执行每个数据表。但是,Fill() 方法没有异步版本 - 即 BeginFill() 会很棒!
我尝试过的一种方法是(伪):
- SqlCommand1.BeginExecuteReader // 第一个查询,用于 DataTable1
- SqlCommand2.BeginExecuteReader // 第二次查询,用于 DataTable2
- SqlCommand1.EndExecuteReader
- SqlCommand2.EndExecuteReader
- DataTable1.Load(DataReader1)
- DataTable2.Load(DataReader2)
但是,DataTable.Load() 需要很长时间:
完成第 1 步到第 4 步需要 3 秒。
然后步骤 5 需要 22 秒。
第 6 步需要 17 秒。
因此,第 5 步和第 6 步总共需要 39 秒。
最终结果是,与一个接一个地执行 2 个 SqlDataAdapter.Fills 相比,这对我没有任何好处。我希望最终结果是整个过程只需要最长的查询(或尽可能接近)。
寻找推荐的方法来最终获得真正异步的方法来填充 DataTable。
还是我自己管理它并滚动 2 个单独的线程,每个线程填充一个 DataTable?
【问题讨论】:
标签: c# .net asynchronous datatable