【发布时间】:2010-11-12 10:59:41
【问题描述】:
我正在寻找通过使用 plinq 来利用 linq 中并行编程的优势,我不确定我是否完全理解它的使用,除了它会更有效地利用所有 cpu 内核,因此对于大型查询它可能会更快。我可以简单地在 linq 调用上调用 AsParallel() 以利用 eplinq 功能,它总是会更快吗?还是应该只在有大量数据需要查询或处理时才使用它?
【问题讨论】:
标签: linq parallel-processing plinq
我正在寻找通过使用 plinq 来利用 linq 中并行编程的优势,我不确定我是否完全理解它的使用,除了它会更有效地利用所有 cpu 内核,因此对于大型查询它可能会更快。我可以简单地在 linq 调用上调用 AsParallel() 以利用 eplinq 功能,它总是会更快吗?还是应该只在有大量数据需要查询或处理时才使用它?
【问题讨论】:
标签: linq parallel-processing plinq
您不能仅仅假设并行执行总是更快。这取决于。在某些情况下,通过并行处理,您会在多核处理器上获得很多收益。在其他情况下,您只会放慢速度,因为并行循环比简单循环稍有过热。
例如,请参阅 my other answer,它解释了为什么嵌入式并行循环可能是一场灾难。
现在,了解在精确上下文中使用并行循环是否是一个好主意的最佳方法是测试并行和非并行实现,并测量它们所花费的时间。 p>
【讨论】:
要进一步补充答案,这还取决于您的数据。稍微有点“老派”,你可以走循环展开的道路,使用 for 而不是 foreach 等等。
但是,您确实需要确保您没有进行微观优化。根据您的数据获取和数据的大小(当然是分页数据),您可能可以不使用它。
这并不是说让您的 linq 多核感知并不酷。但请注意执行此类操作的设置成本,以便能够权衡收益与维护和调试代码的复杂性。
如果您的算法已经是一流的,那么看看 plinq 扩展,map reduce 机制或类似的可能是要走的路。但首先检查您的算法和您的整体收益。以正确的方式操作正确的集合(等)总是会带来好处(和问题!)。
你想解决什么问题?
【讨论】: