c# - 嵌套的 Parallel.ForEach 循环

标签 c# .net concurrency task-parallel-library performance

我有一些代码,目前正在针对多核架构中的并发性进行优化。在我的一个类(class)中,我发现了一个嵌套的 foreach 循环。基本上,外层循环遍历 NetworkInterface 对象数组。内部循环遍历网络接口(interface) IP 地址。

这让我开始思考,嵌套 Parallel.ForEach 循环一定是个好主意吗?阅读本文 (Nested Parallel.ForEach Loops on the same list?) 后,我仍然不确定在效率和并行设计方面什么适用。此示例将 Parallel.Foreach 语句应用于一个列表,其中两个循环都在该列表上执行操作。

在我的例子中,循环做不同的事情,所以,我应该:

  1. 使用嵌套的 Parallel.ForEach 循环?
  2. 在父循环中使用 Parallel.ForEach 并保持内循环不变?

最佳答案

Parallel.ForEach 不一定并行执行——如果可能的话,它只是一个请求。因此,如果执行环境没有并行执行循环的 CPU 能力,它就不会这样做。

如果循环上的操作不相关(即,如果它们是分开的并且不相互影响),我认为在内循环和外循环上使用 Parallel.ForEach 没有问题。

这真的取决于执行环境。如果您的测试环境与生产环境足够相似,您可以进行计时测试,然后确定要做什么。如有疑问,请测试 ;-)

祝你好运!

关于c# - 嵌套的 Parallel.ForEach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12618338/

相关文章:

c# - BinaryFormatter 在 CF 中不存在。解决方案?

android - ARM 对 Java 程序的多核惩罚

c# - 为什么 Concurrent Whatever.Count 会截取快照

c# - 将用户定义类的实例作为数据传递给 ServiceStack PUT

c# - 将 C++ DLL 后期绑定(bind)到 C# - 函数始终返回 true

c# - 为什么在进行更改后我总是必须清理我的解决方案才能命中断点?

c# - worker 线程可以在GUI中读取控件吗?

c# - 为 StringLength 属性使用参数

java - 将日期时间戳转换为 RSS pubDate

C# MVC 处理 View 中的编译错误,例如缺少装配引用?