C# ParallelOptions.MaxDegreeOfParallelism不执行任何操作
使用about ParallelOptions.MaxDegreeOfParallelism上的代码,我尝试了以下操作C# ParallelOptions.MaxDegreeOfParallelism不执行任何操作,c#,task-parallel-library,parallel.foreach,C#,Task Parallel Library,Parallel.foreach,使用about ParallelOptions.MaxDegreeOfParallelism上的代码,我尝试了以下操作 ParallelOptions po = new ParallelOptions { MaxDegreeOfParallelism = 2 }; Parallel.ForEach(files, (currentFile) => { String filename = System.IO.Path.GetFileName(currentFile); Bitmap
ParallelOptions po = new ParallelOptions {
MaxDegreeOfParallelism = 2
};
Parallel.ForEach(files, (currentFile) => {
String filename = System.IO.Path.GetFileName(currentFile);
Bitmap bitmap = new Bitmap(currentFile);
bitmap.RotateFlip(RotateFlipType.Rotate180FlipNone);
bitmap.Save(Path.Combine(newDir, filename));
Console.WriteLine("Processing {0} on thread {1}", filename, Thread.CurrentThread.ManagedThreadId);
});
但是,查看正在输出的线程ID,我可以看到,设置MaxDegreeOfParallelism与不设置MaxDegreeOfParallelism没有任何区别。查看我的CPU监视器,我可以看到所有内核都在运行,即使我将MaxDegreeOfParallelism设置为2
我是不是没抓住要点?我以为这样做是为了限制线程的数量?它看起来不像是将
po
传递到Parallel.ForEach
,所以它只使用默认值。使用Parallel.ForEach
,允许您将Parallel选项
传递到,可能是以下选项:
Parallel.ForEach(files, po, (currentFile) => {
看起来您没有将
po
传递到Parallel.ForEach
,因此它只使用默认值。使用Parallel.ForEach
,允许您将Parallel选项
传递到,可能是以下选项:
Parallel.ForEach(files, po, (currentFile) => {
您没有使用在循环中定义的并行选项。您必须使用不同的重载:
Parallel.ForEach<TSource> Method (IEnumerable<TSource>, ParallelOptions, Action<TSource>)
您没有使用在循环中定义的并行选项。您必须使用不同的重载:
Parallel.ForEach<TSource> Method (IEnumerable<TSource>, ParallelOptions, Action<TSource>)
我确实对此感到好奇,但我看到的MaxDegreeOfParallelism的唯一示例没有说明如何在循环中使用它,所以我愚蠢地认为它可能设置了一些静态属性。当我创建ParallelOptions的实例时,这看起来很奇怪!ThanksI确实对此感到好奇,但我看到的MaxDegreeOfParallelism的唯一示例没有说明如何在循环中使用它,所以我愚蠢地认为它可能设置了一些静态属性。当我创建ParallelOptions的实例时,这看起来很奇怪!谢谢Jen的比你的早2分钟来,我会记下这是答案,但无论如何谢谢,因为你的答案同样清楚。请看我的评论,为什么我错过了这个相当明显的一点@Avrohmyisroel事实恰恰相反,vcsjones击败了我;-)@詹斯,哎呀,你说得对。在这种情况下,我会将此标记为答案。谢谢你们两个!由于Jen的答案比你的早2分钟到达,我将把它作为答案,但无论如何还是要感谢你,因为你的答案同样清楚。请看我的评论,为什么我错过了这个相当明显的一点@Avrohmyisroel事实恰恰相反,vcsjones击败了我;-)@詹斯,哎呀,你说得对。在这种情况下,我会将此标记为答案。谢谢你们两个!