Parallel.ForEach产生不准确的输出

时间:2012-11-13 11:44:31

标签: c#-4.0 parallel-processing

我有一个场景,我必须运行嵌套的foreach来创建一个列表。我所做的伪代码在

之下
foreach(var x in list)           (ForEach1)
   get m // List<string>
   foreach(var k in m)           (ForEach2)
     get t // List<string>
        foreach(var o in t)      (ForEach3)
          // Do some work. and add output to a list
          // which is defined before first for each

但是,因为我在Foreach2和Foreach3中从外部系统(通过运行Perforce命令从Perforce中)检索数据,所以这段代码运行速度非常慢,我确实需要加快速度。

我尝试使用Parallel.ForEach并行运行ForEach1或ForEach2。在我的测试中,它显着改善了性能,但产生了不准确的结果。

  • 如果我使用foreach语句运行此代码,我生成的列表有625项(这是正确的)
  • 如果我使用Parallel.ForEach for ForEach1,我会在列表中添加325,远远低于我的预期。
  • 最后如果我使用Parallel.ForEach for ForEach2,我会将605个项目添加到列表中,但仍有20个项目丢失。

我不确定我做错了什么,或者我错过了什么。使用Parallel foreach或用于?

时需要考虑的事项是什么

有人可以帮我解决一下吗?任何其他改善表现的建议都将受到赞赏

由于

1 个答案:

答案 0 :(得分:1)

我不知道你的'获取'操作是什么,但它也可能是关闭的问题。 你可以在网上搜索它。 例如The foreach identifier and closureshttp://www.codethinked.com/c-closures-explained