我读到PLinq如果发现PLinq更昂贵,它将自动使用非并行Linq。因此,我想到了为什么不对所有内容都使用PLinq(如果可能),然后让运行时决定要使用哪个。

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

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

最佳答案

一个陷阱就是您失去了利用组合排序的能力。

采取以下代码:

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

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

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

有很多理由说明为什么您不应该在所有情况下都始终使用Plinq,我将仅重点介绍一个。不要对“非并行Linq的自动使用”了解太多,它只能处理查询简单或难以并行运行的障碍情况。

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

资源:

MSDN PLNQ white paper

Paul Kimmel on PLINQ

关于c# - 在所有Linq查询中尝试使用Plinq是否可以?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2893637/

10-10 21:57