我有一个场景,我必须运行嵌套的 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 时需要考虑哪些事项?
有人可以帮我整理一下吗?任何其他提高性能的建议将不胜感激
谢谢