1

我有一个场景,我必须运行嵌套的 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 用于 ForEach1,则会将 325 添加到列表中,这远低于我的预期。
  • 最后,如果我将 Parallel.ForEach 用于 ForEach2,我会在列表中添加 605 个项目,但仍然缺少 20 个。

我不确定我做错了什么,或者我错过了什么。使用 Parallel foreach 或 for 时需要考虑哪些事项?

有人可以帮我整理一下吗?任何其他提高性能的建议将不胜感激

谢谢

4

1 回答 1

1

我不知道您的“获取”操作是什么,但这也可能是闭包的问题。你可以在网上搜索它。例如foreach 标识符和闭包以及http://www.codethinked.com/c-closures-explained

于 2012-11-13T12:37:40.050 回答