我想創建一個WebApi方法,該方法運行一系列難以進一步優化的循環計算。單個ASP.net請求的多個核心
x.Items.AsParallel().ForAll(item =>
{
item.RunCalcs();
});
當此代碼執行時,通過查看服務器的任務管理器,似乎它只是馬克塞斯單個處理器核心,而讓其他核心不變。
從我讀到的,asp.net限制了一個處理器核心的單個請求。由於這是一個很少有整體請求的Intranet服務器,我不關心管理服務器資源。
是否有任何方法來覆蓋或解決此行爲,使我的循環運行速度更快?
你試過設置MaxDegreeOfParallelism選項?平行。ForEach(Items,new ParallelOptions(){MaxDegreeOfParallelism = Environment.ProcessorCount},item => {...}); –
有沒有反正你可以設計你的循環,並啓動不同的線程來傳播負載。所以如果你有一個1000件物品的集合,就會爲第一個500個線程啓動一個線程,爲剩下的500個線程啓動另一個線程? – WooHoo
@SK似乎解決了這個問題,但我不知道爲什麼,因爲我認爲PLinq ForAll應該使用最大可用資源。也許這在asp.net下是不同的。 – phosplait