我有一些代码,目前正在针对多核架构中的并发性进行优化。在我的一个类(class)中,我发现了一个嵌套的 foreach
循环。基本上,外层循环遍历 NetworkInterface
对象数组。内部循环遍历网络接口(interface) IP 地址。
这让我开始思考,嵌套 Parallel.ForEach
循环一定是个好主意吗?阅读本文 (Nested Parallel.ForEach Loops on the same list?) 后,我仍然不确定在效率和并行设计方面什么适用。此示例将 Parallel.Foreach
语句应用于一个列表,其中两个循环都在该列表上执行操作。
在我的例子中,循环做不同的事情,所以,我应该:
- 使用嵌套的 Parallel.ForEach 循环?
- 在父循环中使用 Parallel.ForEach 并保持内循环不变?
最佳答案
Parallel.ForEach 不一定并行执行——如果可能的话,它只是一个请求。因此,如果执行环境没有并行执行循环的 CPU 能力,它就不会这样做。
如果循环上的操作不相关(即,如果它们是分开的并且不相互影响),我认为在内循环和外循环上使用 Parallel.ForEach 没有问题。
这真的取决于执行环境。如果您的测试环境与生产环境足够相似,您可以进行计时测试,然后确定要做什么。如有疑问,请测试 ;-)
祝你好运!
关于c# - 嵌套的 Parallel.ForEach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12618338/