使用parallel.For添加数据行

时间:2011-01-07 22:56:21

标签: c# parallel-processing aggregate

我在数据表中有n组行,我想添加这n组。我正在寻找将其并行化的方法。

例如: 设置1:第0行到第9行 设置2:第10行到第19行 设置3:第20行第30行第29行 第3组:第20行第30行第29行

将这些添加到另一个表中 总数据表(第0行到第9行)=第1组+第2组+第3组

我正在使用C#。

目前我已经使用ThreadPool.QueueUserWorkItem实现了这个,但是它有点难看。

我跨越n个线程(max =总cpus) 将集合分配给这些线程并计算部分总和 跨越n / 2个线程来对这些部分总和求和 当我有两个部分总和时,我将它们总和为总数据集。

例如: 如果我有10套和4 cpus

第一次迭代

第一个cpu:总和0,1,2 = sum1 第二个cpu:总和3,5 = sum2 第3个cpu:总和6,7 = sum3 第4个cpu:总和8,9 = sum4

第二次迭代

第一个线程sum1 + sum2 = sum10 第二线程sum3 + sum4 = sum 11

第三次也是最后一次迭代

总和= sum10 + sum11

我正在尝试使用.net framework 4.0并行库。

2 个答案:

答案 0 :(得分:0)

Microsoft模式和实践组有一本书详细介绍了许多并行编程技术。有一整章关于并行聚合,可以在http://msdn.microsoft.com/en-us/library/ff963547.aspx找到,其中包含C#中的代码示例。

答案 1 :(得分:0)

请参阅:

Parallel ForEach on DataTable

来自MSDN:

  

此类型对于多线程读取操作是安全的。您必须同步任何写操作。

http://msdn.microsoft.com/en-us/library/system.data.datatable.aspx