我有一些代码,我目前正在为多核架构中的并发性进行优化。在我的一个类中,我找到了一个嵌套的foreach循环。基本上,外部循环遍历一个NetworkInterface对象数组。内循环通过网络接口IP地址进行迭代。
这让我想到,使用嵌套的Parallel.ForEach循环一定是个好主意吗?在阅读了这篇文章(Nested Parallel.ForEach Loops on the same list?)之后,我仍然不确定在效率和并行设计方面适用什么。这个例子是关于将Parallel.Foreach语句应用于一个列表,其中两个循环都在执行该列表上的操作。
在我的例子中,循环正在做不同的事情,所以,我应该:
发布于 2012-09-27 09:44:32
Parallel.ForEach不一定并行执行--如果可能的话,这只是一个请求。因此,如果执行环境不具备并行执行循环的CPU能力,则不会这样做。
如果循环上的操作不相关(也就是说,如果它们是分开的,并且不相互影响),我认为在内部循环和外部循环上使用Parallel.ForEach都没有问题。
这取决于执行环境。如果您的测试环境与生产环境非常相似,您可以执行定时测试,然后确定要做什么。当有疑问时,测试;)
祝好运!
发布于 2012-09-27 09:44:20
答案将是,这取决于;
线程并不便宜,它们需要时间来创建,而内存则需要存在。如果您没有对这些IP地址执行计算成本高昂的操作,并且使用错误类型的集合进行并发访问,那么几乎可以肯定地说,您正在减慢您的应用程序。
使用StopWatch帮助您回答这些问题。
https://stackoverflow.com/questions/12618338
复制相似问题