在所有Linq查询中尝试使用Plinq是否可以?

我读到,如果发现PLinq更贵,PLinq将自动使用非并行Linq。 所以我想为什么不将PLinq用于所有事情(如果可能的话)并让运行时决定使用哪一个。

应用程序将部署到多核服务器,我可以开发更多代码来处理并行性。

使用plinq作为默认值有哪些缺陷?

一个陷阱是你失去了利用套装排序的能力。

请使用以下代码:

var results = new int { 0 ,1 ,2 ,3 }; var doSomethingSpecial = (from r in results.AsParallel() select r / 2).ToArray(); 

您不能指望按顺序排列的结果,因此结果可能是该集合的任何排列。 这是最大的陷阱之一,从某种意义上讲,如果您处理有序数据,那么由于排序成本,您可能会失去性能优势。

另一个问题是你失去了捕获已知exception的能力。 所以我无法捕获空指针exception(不是说你应该这样做)或者甚至捕获FormatException。

有很多理由说明为什么你不应该总是在所有情况下使用Plinq,我将再强调一个。 不要读到“自动使用非并行Linq”,它只能处理查询简单的障碍情况,或者太复杂而不能并行运行。

始终记住,使用PLINQ越多,您将在服务器上消耗的资源就越多,而这些资源正在从其他正在运行的线程中消失。

资源:

MSDN PLNQ白皮书

Paul Kimmel在PLINQ上