加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在Parallel.ForEach中指定默认的MaxDegreeOfParallelism?

发布时间:2020-12-16 02:04:02 所属栏目:百科 来源:网络整理
导读:我们希望可选地控制并行循环中“线程”的数量,以避免压倒Web服务(例如). 是否可以在Parallel.ForEach循环上指定自定义MaxDegreeOfParallelism,还可以根据需要恢复为默认值?看似零(0)是MaxDegreeOfParallelism的无效值,而我希望它只是意味着“忽略”. 换句话
我们希望可选地控制并行循环中“线程”的数量,以避免压倒Web服务(例如).

是否可以在Parallel.ForEach循环上指定自定义MaxDegreeOfParallelism,还可以根据需要恢复为默认值?看似零(0)是MaxDegreeOfParallelism的无效值,而我希望它只是意味着“忽略”.

换句话说,你能避免编写这种类型的代码吗?

int numParallelOperations = GetNumParallelOperations();
if (numParallelOperations > 0)
{
 ParallelOptions options = new ParallelOptions();
 options.MaxDegreeOfParallelism = numParallelOperations;
 Parallel.ForEach(items,options,i => 
 {
   Foo(i);
 });
}
else
{ 
 Parallel.ForEach(items,i => 
 { 
   Foo(i);
 });
}

解决方法

你是说按照 MSDN的-1:

The MaxDegreeOfParallelism limits the number of concurrent operations
run by Parallel method calls that are passed this ParallelOptions
instance to the set value,if it is positive. If
MaxDegreeOfParallelism is -1,then there is no limit placed on the
number of concurrently running operations.

您可以像这样控制大致的线程数:

// use only (ca) one kernel:
int degreeOfParallelism = 1;
// leave (ca) one kernel idle:
int degreeOfParallelism = Environment.ProcessorCount - 1;
// use (ca) half of the kernels:
int degreeOfParallelism = Environment.ProcessorCount > 1 ? 
                          Environment.ProcessorCount / 2 : 1;
// run at full speed:
int degreeOfParallelism =  - 1;

var options = new ParallelOptions();
options.MaxDegreeOfParallelism = degreeOfParallelism;

Parallel.For(0,x,y => 
//...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读