9

我正在寻找通过使用 plinq 来利用 linq 中并行编程的优势,我不确定我是否完全理解它的使用,除了它会更有效地利用所有 cpu 内核,因此对于大型查询它可能会更快. 我可以简单地在 linq 调用上调用 AsParallel() 来利用 eplinq 功能,它总是会更快吗?还是应该只在有大量数据需要查询或处理时才使用它?

4

2 回答 2

7

您不能仅仅假设并行执行总是更快。这取决于。在某些情况下,通过并行处理,您将在多核处理器上获益良多。在其他情况下,您只会减慢速度,因为并行循环比简单循环有一点过热。

例如,请参阅我的另一个答案,它解释了为什么嵌入式并行循环可能是一场灾难。

现在,了解在精确上下文中使用并行循环是否是一个好主意的最佳方法是测试并行和非并行实现并测量它们所花费的时间。

于 2010-11-12T11:06:41.307 回答
3

为了进一步补充答案,它还取决于您的数据。稍微有点“老派”,你可以走循环展开的道路,使用 for 而不是 foreach 等等。

但是,您确实需要确保您没有进行微优化。根据您的数据获取和数据大小(当然是分页数据),您可能可以不使用它而侥幸逃脱。

这并不是说让你的 linq 多核感知并不酷。但请注意执行此类操作的设置成本,以便能够权衡好处与维护和调试代码的复杂性。

如果您的算法已经是一流的,那么查看 plinq 扩展,map reduce 机制或类似的方法可能是要走的路。但首先检查您的算法和您的整体收益。以正确的方式操作正确的集合(等)总是会带来自己的好处(和问题!)。

你想解决什么问题?

于 2010-11-12T11:12:27.187 回答