16

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

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

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

4

1 回答 1

9

一个坑是你失去了利用集合排序的能力。

采取以下代码:

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 白皮书

PLINQ 上的 Paul Kimmel

于 2010-05-23T23:17:02.320 回答