我正在使用PLINQ對數據進行並行操作。每個線程都會消耗大量的內存,這些內存是基於算法設置而變化的,所以根據算法選項預先計算需要多少內存並不容易。當內存要求較低時,最優的線程數爲8,系統總數爲8;當內存要求很高時,2個線程相對於1有顯着的改進,但是一旦使用了3個線程,系統就開始觸發分頁文件,並且CPU利用率下降到0,並且性能下降了數百倍。使用PLINQ對線程計數的內存使用限制
我希望能夠做的是讓PLINQ增量線程數量,同時監視內存負載,一旦系統耗盡可用的物理內存,請在最後一個線程上設置取消標記,以便它可以回滾其內存,允許其他線程以最佳方式執行。
有關如何從PLINQ中獲取此行爲的任何想法,還是必須完全使用我自己的?
據我所知,PLINQ決定了前面的線程數量,並且在問題執行過程中保持不變。你不能做任何事情(除了通過調用'WithDegreeOfParallelism()'來改變這個常量)。如果您使用的是'Parallel.ForEach()',您可能會有更好的機會:使用自定義的'TaskScheduler'。 – svick 2013-04-25 23:18:44