c# - 并行执行功能和合理数量的实例
问题描述
我有一个对象列表,我必须对它们中的每一个做一些详细说明,所有这些都在尽可能少的时间内完成。
由于这些详细说明彼此独立,因此我们决定与Parallel.ForEach
.
Parallel.ForEach(hugeObjectList,
new ParallelOptions { MaxDegreeOfParallelism = 50 },
obj => DoSomeWork(obj)
);
由于在我看来设置一个巨大的数字(例如 50 或 100)似乎不合理,ParallelOptions.MaxDegreeOfParallelism
我们如何找到并行任务的最佳数量来处理这个列表?
是否在不同的核心上Parallel.Foreach
启动?DoSomeWork
(所以,既然我们有 4 个核心,那么正确的并行度应该是 4?)
解决方案
询问平台应该可以让您接近最佳状态(对于 CPU 密集型工作)。
new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount },
什么都不做是另一个很好的选择,即
//new ParallelOptions { MaxDegreeOfParallelism = 50 },
编辑
有很多带有数据库的io ...
这使得MaxDegreeOfParallelism = 1
另一个非常好的候选人。或者也许是 2。
您真正应该研究的是 async/await 和异步数据库调用。不是 Parallel 类。
推荐阅读
- maven - 在 unix 机器上安装 apache maven 时存储 m2 文件的位置
- apollo - 在此 Apollo 语法中设置客户端的正确方法
- java - Apache Camel - 如何在 java 中使用属性配置端点
- event-handling - 光滑网格;自己处理单元格中元素的鼠标悬停/悬停事件
- c - scanf(" "); 是什么意思 双引号之间只有一个空格?
- html - 通过 attr 进行 Angular 属性绑定。使用@Attribute 时产生空值
- css - 如何制作这样的css动画?
- c++ - 如何为 Visual Studio 禁用 servicehub.identityhost
- dart - http请求中的int到双重转换
- sql - 重新生成丢失的身份价值