首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PLINQ和AsParallel()

PLINQ和AsParallel()
EN

Stack Overflow用户
提问于 2014-08-10 09:35:05
回答 2查看 219关注 0票数 2

这段代码之间有什么区别:

代码语言:javascript
复制
int[] tab = new int[] { 1, 2, 3, 4, 5 };

List<int> result1 = (from t in tab
                     where t > 2
                     select t).AsParallel().ToList();

这是:

代码语言:javascript
复制
List<int> result2  = (from t in tab.AsParallel()
                      where t > 2
                      select t).ToList();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-10 09:40:00

我们回去吧..。

在线程之间划分工作有两种策略:数据并行和任务并行。

您的位置在:structured data parallelism专区。(单位: plinq)

因此,我们处理的数据应该被划分为线程。

你的第一段代码毫无意义。

看看AsParallel的语法:

代码语言:javascript
复制
public static ParallelQuery AsParallel(
    this IEnumerable source
)

AsParallel应应用于IEnumerable。(就像你的两个examples...but -)

这里的重点是将工作划分为线程。

这将数据分配给执行相同操作的线程。

在第二段代码中,您确实将数据划分为执行相同操作的线程。(因此你可以获得更好的性能)

但在第一个代码中,整个“制造核心热操作”都是以单线程方式完成的。( where clause...) -所以你漏掉了整件事

注意-如果:

代码语言:javascript
复制
...(from t in tab
    where t > 2
    select t).AsParallel().where(....)....
票数 3
EN

Stack Overflow用户

发布于 2014-08-10 09:38:17

调用AsParallel之后的所有内容都将被并行化。

因此,在第一个清单中,只有ToList操作将被并行化,因为在第二个代码示例中,整个查询将被并行化。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25227304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档