【发布时间】:2022-04-03 18:45:48
【问题描述】:
我想使用Parallel.Foreach处理数千条记录,但是CPU使用率是100%。
Parallel.ForEach(PhotoPaths, new ParallelOptions { MaxDegreeOfParallelism = 10 }, photopath =>
{
RemovePhoto(photo);
});
public void RemovePhoto(string photopath)
{
File.Delete(photopath);
}
如果我使用MaxDegreeOfParallelism = 2,我的操作就会超时。
对于正常的 foreach 循环,它会超时,所以我选择了Parallel.Foreach,我的任务正在完成,但唯一的问题是 CPU 利用率为 100%。如果我们有任何替代方案,请告诉我。
【问题讨论】:
-
but the cpu usage is 100 %- 这是并行处理点,同时利用所有内核。 -
如果 CPU 使用率为 100%,那么您正在使用所有可用的 CPU 周期...您还期待什么?
-
如果您认为 100% 是个问题,请查看ZOMG! This program is using 100% CPU!1! Think of the puppies!!11!!1!1!eleven。如果您想限制处理记录的速度,那么它可能是 throttling when using Parallel.For 的重复项
-
文件在什么存储上?这里 100% 的 CPU 似乎很奇怪,预计存储会成为瓶颈。
-
TBH,它可能是删除文件的代码,但这不是我们看到的帖子。您已经设置了正确的
MaxDegreeOfParallelism,所以它是另一回事。你能不能试试这个来限制它们,MaxDegreeOfParallelism = Convert.ToInt32(Math.Ceiling((Environment.ProcessorCount * 0.75) * 1.0)),它应该把它限制在 75% 左右。你知道你有多少个处理器吗?
标签: c# parallel-processing cpu-usage parallel.foreach