【问题标题】:PLINQ performance problemPLINQ 性能问题
【发布时间】:2011-01-29 11:11:08
【问题描述】:

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

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

请帮助我,我没有得到适当的性能。

查询是:

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

【问题讨论】:

  • 您需要发布查询或至少发布尽可能多的查询才能获得答案。
  • 你在查询中做什么?
  • ParallelQuery j = Enumerable.Range(0, 1000000).AsParallel(); var sss = j.Where(o => o%2 == 0);
  • 好吧,我不知道你给了我缺点,因为这不是很多代码
  • 我猜将其拆分为多个线程并重新加入结果的成本大于 where 的成本。如果您的谓词很昂贵,您可能只会获得加速。

标签: c# .net performance c#-4.0 plinq


【解决方案1】:

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

Parallel Operation Batching

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

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

【讨论】:

    【解决方案2】:

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

    在这种情况下,您正在对其进行一些非常简单的数学运算,因此每个操作都在

    看看Custom Partitioners for PLINQ and TPL

    【讨论】:

      猜你喜欢
      • 2020-08-10
      • 1970-01-01
      • 2020-02-22
      • 2016-09-05
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      相关资源
      最近更新 更多