我正在通过使用plinq来利用linq中的并行编程的优势,我不确定我完全理解它的使用除了它将更有效地利用所有cpu核心这样的事实,因为对于大型查询它可能会更快。我可以简单地在linq调用上调用AsParallel()来使用eplinq功能,它会更快吗?或者我应该只在有大量数据要查询或处理时才使用它?
答案 0 :(得分:7)
你不能只假设并行执行总是更快。这取决于。在某些情况下,通过并行处理,您将在多核处理器上获得很多收益。在其他情况下,你只会减慢速度,因为并行循环在简单循环上有一个小的过热。
例如,请参阅my other answer,其中解释了嵌入式并行循环可能成为灾难的原因。
现在,了解在精确上下文中使用并行循环是否是一个好主意的最佳方法是测试并行和非并行实现并测量它们所花费的时间。
答案 1 :(得分:3)
要进一步添加答案,还取决于您的数据。走了一会儿“老学校”,你可以沿着循环展开的道路,使用for而不是foreach等等。
但是,您确实需要确保不进行微观优化。根据您的数据提取和数据大小(当然还有分页数据),您可能无法使用它。
这并不是说让你的linq多核知道并不酷。但要注意做类似事情的设置成本,以便能够权衡维护和调试代码的复杂性。
如果您的算法已经是一流的,那么查看plinq扩展,可以采用地图缩减机制或类似方法。但首先检查您的算法和您的整体利益。以正确的方式运行正确的集合(等)将始终带来自己的好处(和问题!)。
你想要解决什么?