簡體   English   中英

使用PLINQ時,如何在使用AsParallel()時設置首選塊大小.MaxDegreeOfParallelism(4)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM