我读到如果发现PLinq更贵,PLinq会自动使用非并行Linq。所以我想为什么不将PLinq用于所有事情(如果可能的话)并让运行时决定使用哪一个。
应用程序将部署到多核服务器,我可以开发更多代码来处理并行性。
将plinq用作默认值会有什么陷阱?
答案 0 :(得分:9)
一个陷阱是你失去了利用套装排序的能力。
请使用以下代码:
var results = new int { 0 ,1 ,2 ,3 };
var doSomethingSpecial = (from r in results.AsParallel() select r / 2).ToArray();
您不能指望按顺序排列的结果,因此结果可能是该集合的任何排列。这是最大的陷阱之一,从某种意义上讲,如果您处理有序数据,那么由于排序成本,您可能会失去性能优势。
另一个问题是你失去了捕获已知异常的能力。所以我无法捕获空指针异常(不是说你应该这样做)甚至是捕获FormatException。
有很多理由说明为什么你不应该总是在所有情况下使用Plinq,我将再强调一次。不要读到“自动使用非并行Linq”,它只能处理查询简单的障碍情况,或者太复杂而不能并行运行。
请记住,使用PLINQ越多,您将在服务器上消耗的资源就越多,而这些资源将从其他正在运行的线程中消失。
<强>资源:强>