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:
您可以像这样控制大致的线程数: // 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 => //... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |