我需要将多个 sql 语句从 SQL Server 加载到 DataTables 中。大多数语句返回大约 10.000 到 100.000 条记录,每条记录最多需要几秒钟的时间来加载。我的猜测是,这仅仅是由于需要推送的数据量。声明本身不需要太多时间来处理。
所以我尝试使用 Parallel.For() 来并行加载数据,希望整体处理时间会减少。我确实获得了 10% 的性能提升,但这还不够。一个原因可能是我的机器只是一个双核,因此限制了这里的好处。不过,将部署该程序的服务器有 16 个内核。
我的问题是,我如何才能进一步提高性能?使用异步数据服务查询会是比 PLINQ 更好的解决方案(BeginExecute 等)吗?或者也许其他一些方法?
SQl 服务器在同一台机器上运行。在部署服务器上也是如此。
编辑:我使用 DataReader 而不是 DataTable 运行了一些测试。这已经将加载时间减少了大约 50%。伟大的!我仍然想知道如果使用多处理器机器,使用 BeginExecute 进行并行处理是否会改善整体加载时间。有人有这方面的经验吗?感谢您对此的任何帮助!
更新:我发现处理 sql 语句消耗了大约一半的加载时间。在 SQL Server Management Studio 中,这些语句只花费了一小部分时间,但不知何故,它们通过 ADO.NET 花费了更长的时间。因此,通过使用 DataReaders 而不是加载 DataTables 并调整 sql 语句,我已经降低了大约 25% 的初始加载时间。使用 Parallel.For() 在并行线程中加载 DataReader 并没有改进。所以现在我对结果很满意,就这样吧。也许当我们更新到 .NET 4.5 时,我会尝试加载异步 DataReader。