Parallel.For如果loopcount为1则失败

时间:2017-04-27 14:44:14

标签: c# parallel-processing

我有以下代码;虽然结果与非并行版本不一致,但它在大循环计数上执行,但如果loopcount为1则失败。我的Parallel.For有什么问题?

我正在计算约1000个股票与~500个指数的相关系数;随着时间的推移每个都有~250次测每个股票(目标)与每个指数(测试)相关联。目标循环是串行的,我想并行进行测试循环,因为对于每个测试,目标数据都是相同的。

在方法DoOneTest中针对此一个目标的一个测试计算相关性,使用两个索引调用它,并且目标数据数组表示要对所有测试保持不变的目标数据。

teststart = 0;
UserUnique.TestRank = 1; //# of tests
var options = new ParallelOptions { MaxDegreeOfParallelism = 1 };
Parallel.For(teststart, UserUnique.TestRank - 1, options, paralleltestcounter =>
{
      int testindex = paralleltestcounter;
      UserUnique.outputGrid = DoOneTest(tgtindx, testindex, x);
 });

1 个答案:

答案 0 :(得分:4)

它失败,因为循环计数设置为1,然后从中减去1:

UserUnique.TestRank = 1; //# of tests
Parallel.For(teststart, UserUnique.TestRank - 1, options, paralleltestcounter =>

因此,fromInclusivetoExclusive都是0,因此循环永远不会进入。将你的循环改为:

Parallel.For(teststart, UserUnique.TestRank, options, paralleltestcounter =>

了解更多信息see MSDN.

同样@juharr评论:

  

MaxDegreeOfParallelism设置为1似乎首先打败了使用Parallel.For的目的。