C# 默认情况下,plinq会对Dictionary使用范围分区还是区块分区?如何强迫对方?

C# 默认情况下,plinq会对Dictionary使用范围分区还是区块分区?如何强迫对方?,c#,parallel-processing,plinq,C#,Parallel Processing,Plinq,默认情况下,plinq会对字典使用范围分区还是块分区 这是我的用例: Dictionary<string,string> asmachtas = new Dictionary<string,string>(); ... int sum = asmachtas.AsParallel().Sum(arg => myFunction(arg)); 我怎么能自己检查呢?如何强制执行其他类型的分区?范围分区仅适用于实现IList的集合。字典只实现IE

默认情况下,plinq会对字典使用范围分区还是块分区

这是我的用例:

    Dictionary<string,string> asmachtas = new Dictionary<string,string>();
    ...
    int sum = asmachtas.AsParallel().Sum(arg => myFunction(arg));

我怎么能自己检查呢?如何强制执行其他类型的分区?

范围分区仅适用于实现IList的集合。字典只实现IEnumerable而不是IList,所以将使用块分区


PLINQ使用的分区算法是一个实现细节,因此您实际上没有办法查找它。您可以将断点放入传递到Sum中的委托中,并从调用堆栈推断分区方案,但堆栈相当混乱。

范围分区仅适用于实现IList的集合。字典只实现IEnumerable而不是IList,所以将使用块分区


PLINQ使用的分区算法是一个实现细节,因此您实际上没有办法查找它。您可以在传递给Sum的委托中放置断点,并从调用堆栈中推断分区方案,但堆栈相当混乱。

正如Igor所说,查询将使用块分区


我想补充一点,将其转换为asmachtas.ToList.aspallel将使其使用范围分区。或者,如果您使用的是一个列表,您可以使用partitioner.Createasmachtas创建一个chunk partitioner,true。

正如Igor所说,查询将使用chunk partitioning

我想补充一点,将其转换为asmachtas.ToList.aspallel将使其使用范围分区。或者,如果您使用的是一个列表,您可以使用partitioner.Createasmachtas创建一个chunk partitioner,true。

提到AsParallel是由ParallelEnumerable定义的,所以我认为是另一种方式提到AsParallell是由ParallelEnumerable定义的,所以我认为是另一种方式