我有一些代碼試圖並行執行一個操作。爲什麼AsParallel().ForAll似乎沒有充分利用我的操作的CPU使用率?
的代碼基本上是
items
.AsParallel()
.ForAll(item =>
{
DoWork(item);
});
項目是2500分的事情要處理的列表。 DoWork()是完全沒有IO的100%CPU計算。它大約需要1秒,但可能會有所不同。
我看到的問題是所有核心正在使用,但他們幾乎沒有被使用。我認爲這是與工作本身有關,所以我嘗試了下面的代碼並得到了相同的結果。
items
.Batches(10)
.AsParallel()
.ForAll(batch =>
{
foreach(var item in batch)
{
DoWork(item);
}
});
我想利用率在80%附近,但對於我的生活我無法在那裏得到它。不知道該怎麼辦。
我試過Parallel.ForEach沒有運氣。嘗試.WithDegreeOfParallelism(Environment.ProcessorCount * 2)沒有運氣。
不知道接下來要嘗試什麼。
AsParallel()。ForAll沒有全部使用...全部是什麼? –
99%您的'DoWork'實際上會以所有其他方式安排回UI線程或阻止線程。請提供真實的[MCVE]。 –
它實際上是一個Windows服務,所以沒有用戶界面。我不認爲有任何封鎖。 – Telavian