[英]With PLINQ, how can I set the preferred chunk size when using AsParallel().MaxDegreeOfParallelism(4)?
我有一個包含數千個對象的列表,在該列表上執行可能需要1到3分鍾的操作。 我當然正在使用PLINQ,但我注意到,當接近輸入列表的末尾時,只有一個核心正在工作,就像事先確定了分區一樣。
那么,對於IList,只要有待處理的項目,強制PLINQ繼續使用工作線程的最佳方法是什么? 該計算機具有大量可用的硬件核心。
參考文獻:
根據我的理解,PLINQ將根據源序列是否為IList
來選擇范圍或塊分區。 如果它是IList
,則邊界是已知的,並且元素可以通過索引訪問,因此PLINQ選擇范圍分區以在線程之間均勻地划分列表。 例如,如果列表中有1000個項目並且使用4個線程,則每個線程將有250個要處理的項目。 另一方面,如果源序列不是 IList
,PLINQ不能使用范圍分區,因為它不知道范圍是什么; 所以它使用塊分區。
在你的情況下,如果你有一個IList
並且你想強制進行塊分區,你可以讓它看起來像一個簡單的IEnumerable
:而不是寫這個:
list.AsParallel()...
寫下:
list.Select(x => x).AsParallel()...
虛擬投影將隱藏源實際上是IList
的事實,因此PLINQ將使用塊分區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.