我读到如果 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 越多,您在服务器上消耗的资源就越多,这些资源会占用其他正在运行的线程。
资源:
关于c# - 尝试在所有 Linq 查询中使用 Plinq 是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893637/