【发布时间】:2011-02-23 00:45:57
【问题描述】:
我读到如果 PLinq 发现 PLinq 更昂贵,它会自动使用非并行 Linq。所以我想为什么不对所有事情都使用 PLinq(如果可能),让运行时决定使用哪一个。
应用程序将部署到多核服务器,我可以开发更多代码来处理并行性。
默认使用 plinq 有哪些缺陷?
【问题讨论】:
标签: c# linq .net-4.0 task-parallel-library plinq
我读到如果 PLinq 发现 PLinq 更昂贵,它会自动使用非并行 Linq。所以我想为什么不对所有事情都使用 PLinq(如果可能),让运行时决定使用哪一个。
应用程序将部署到多核服务器,我可以开发更多代码来处理并行性。
默认使用 plinq 有哪些缺陷?
【问题讨论】:
标签: c# linq .net-4.0 task-parallel-library plinq
一个坑是你失去了利用集合排序的能力。
取以下代码:
var results = new int { 0 ,1 ,2 ,3 };
var doSomethingSpecial = (from r in results.AsParallel() select r / 2).ToArray();
您不能指望按顺序出现的结果,因此结果可能是集合的任何排列。这是最大的缺陷之一,从某种意义上说,如果您正在处理有序数据,那么您可能会因为排序成本而失去性能优势。
另一个问题是您失去了捕获已知异常的能力。所以我无法捕获空指针异常(并不是说你应该这样做),甚至无法捕获 FormatException。
有很多理由说明为什么您不应该总是在所有情况下都使用 Plinq,我将只强调一个。不要把“自动使用非并行Linq”读得太深,它只能处理查询过于简单或过于复杂而无法并行运行的障碍情况。
请始终牢记,使用 PLINQ 的次数越多,您在服务器上消耗的资源就越多,这会占用其他正在运行的线程。
资源:
【讨论】: