这段代码之间有什么区别:
int[] tab = new int[] { 1, 2, 3, 4, 5 };
List<int> result1 = (from t in tab
where t > 2
select t).AsParallel().ToList();这是:
List<int> result2 = (from t in tab.AsParallel()
where t > 2
select t).ToList();发布于 2014-08-10 09:40:00
我们回去吧..。

在线程之间划分工作有两种策略:数据并行和任务并行。
您的位置在:structured data parallelism专区。(单位: plinq)
因此,我们处理的数据应该被划分为线程。
你的第一段代码毫无意义。
看看AsParallel的语法:
public static ParallelQuery AsParallel(
this IEnumerable source
)AsParallel应应用于IEnumerable。(就像你的两个examples...but -)
这里的重点是将工作划分为线程。
这将数据分配给执行相同操作的线程。
在第二段代码中,您确实将数据划分为执行相同操作的线程。(因此你可以获得更好的性能)
但在第一个代码中,整个“制造核心热操作”都是以单线程方式完成的。( where clause...) -所以你漏掉了整件事
注意-如果:
...(from t in tab
where t > 2
select t).AsParallel().where(....)....发布于 2014-08-10 09:38:17
调用AsParallel之后的所有内容都将被并行化。
因此,在第一个清单中,只有ToList操作将被并行化,因为在第二个代码示例中,整个查询将被并行化。
https://stackoverflow.com/questions/25227304
复制相似问题