Roy*_*mir 5 .net c# parallel-processing .net-4.0 plinq
在哪种情况下,范围分区是比块分区更好的选择?(和vise诗)
我已经知道了
块分区:从输入到处理抓取小块元素,然后从小块开始,增加块大小.
范围分区为每个工作人员预分配相同数量的元素
另外,为什么这个代码:(找到素数到100000)
IEnumerable<int> numbers = Enumerable.Range (3, 100000-3);
var parallelQuery = from n in numbers.AsParallel()
where Enumerable.Range (2, (int) Math.Sqrt (n)).All (i => n % i > 0)
select n;
Run Code Online (Sandbox Code Playgroud)
可能会执行不当使用范围划分?
虽然这段代码:(找到第一百万个数字的sqrt之和)
ParallelEnumerable.Range (1, 10000000).Sum (i => Math.Sqrt (i))
Run Code Online (Sandbox Code Playgroud)
使用范围分区会更好的选择吗?
在第一个样本中,每个项目所需的时间取决于n.在90000之后搜索下一个素数比在11之后找到一个更多的时间.
因此,当划分为相等的范围时,最后的范围将比第一个范围执行更多的工作.
在第二个样本中,每次操作的时间在整个范围内是相等的.因此范围分区将很好地工作.