我想在并行foreach循环中将一个DataTable附加到另一个DataTable。我使用Merge来追加数据表。当我使用合并或没有合并它花费太多时间它完成得如此之快。
ReportService _rs = new ReportService();
DataTable dtMain = new DataTable();
Parallel.ForEach(brandCode, SICode =>
{
dtMain.Merge(_rs.myFunctionReturnDataTable(SICode));//this takes too much time
//_rs.myFunctionReturnDataTable(SICode);this does not take time
});
答案 0 :(得分:0)
基于Merge的MSDN,我感觉计算密集的差异正在发生,而且你的代码很慢,因为它占用了你所有的时间。 DataTable对于读取是线程安全的,但不是用于写入,所以可能有些"坏"事情正在发生(这可能会让你这么慢)。无论哪种方式,我的建议是将myFunctionReturnDataTable的所有结果放入ConcurrentBag并稍后进行合并。可能有一些战略性的方法可以在以后进行合并,但我只是在每个返回的DataTable上循环进行合并,看看它能给你带来多大的帮助。