PLINQ 是在 .NET 4.0 Framework 中作为 LINQ 的扩展添加的。
- 它是什么?
- 它解决了哪些问题?
- 什么时候使用它,什么时候不使用?
这是Parallel LINQ。它是一种在多核/多处理器系统上并行运行LINQ查询的方法,以便(希望)加速查询速度。
在MSDN Magazine中有一篇不错的文章介绍此功能。
有关当前详情和计划,请阅读Parallel Programming with .NET Team Blog上的文章。他们是实现并行扩展(包括PLINQ)的团队。
PLINQ是在并行环境下执行的LINQ,它会利用您当前计算机的所有处理能力。
如果您拥有一台双核处理器等具有2个内核的计算机,则可以使用语言集成查询运算符以并行方式执行代码。
使用“仅”LINQ无法获得如此高的性能,因为标准的语言集成查询运算符不会并行化您的代码。这意味着您的代码将以串行方式运行,而不能利用所有可用的处理器内核。
有许多PLINQ查询运算符可以使用众所周知的并行模式执行您的代码。
请查看我的博客文章,在其中展示了当您使用AsParallel扩展方法并行运行简单的LINQ查询时,您可以获得的加速效果:
使用Visual Studio 2010/2012的Parallel LINQ(PLINQ)-性能测试
如果您想深入了解PLINQ,我建议您阅读:
这是一个库,可以将普通的 LINQ 查询拆分成多个小任务,并利用处理器核心在多个线程上执行每个单独的任务。
它允许你在LINQ中添加.AsParallel,尝试使用尽可能多的处理器执行查询。很棒,但你仍然需要了解一些关于你的算法是否“可并行”的知识 - 它不是魔法。
基本上,它消除了管理线程池的需要,并管理同步从每个线程返回的结果 - 通常情况下,如果没有并行扩展库,你将不得不手动完成这项工作。
来自维基百科的Parallel Extensions:
并行 LINQ(PLINQ)是一个用于LINQ的并发查询执行引擎,可以将对象(LINQ to Objects)和XML数据(LINQ to XML)上的查询执行并行化。 PLINQ旨在通过使用查询来暴露数据并行性。任何已实现为查询的对象计算都可以由PLINQ并行化。但是,这些对象需要实现IParallelEnumerable接口,该接口由PLINQ本身定义。它在内部使用TPL进行执行。