2

我在收集超过 10000 个元素时使用 PLINQ...与顺序查询相比,我没有获得性能。

我的系统配置如下:操作系统 - Windows 7 32 位,处理器 - Intel Core2Duo。

请帮助我,我没有得到适当的表现。

查询是:

ParallelQuery<int> j = Enumerable.Range(0, 1000000).AsParallel();
var sss =  j.Where(o => o%2 == 0);
4

2 回答 2

4

由于您的任务非常轻量级,因此线程上下文切换将导致主要开销。可以通过将轻量级任务分组到涉及更多大量工作的批次来改进事情。这可以使用 Plinq 中的分区支持来实现。请看以下问题:

并行操作批处理

通过对任务进行分组,您将更好地利用多个线程,因为管理开销变得不那么重要了。

在您现有的代码示例中,它类似于用顶针从井中取水,将任务分组更像是使用水桶。

于 2011-01-29T11:37:11.440 回答
2

即使任务在线程之间拆分,调用线程的开销也很容易变得比简单地顺序运行要多。

在这种情况下,您正在对其进行一些非常简单的数学运算,因此每个操作都在 <10 纳秒内,并且很好地利用了 L1 和 L2 缓存。当您引入线程时,它们的启动成本相对较高,部分原因是它们在等待某事时处于休眠状态。

查看PLINQ 和 TPL 的自定义分区器

于 2011-01-29T12:09:10.333 回答