PLINQ有什么实际好处?

spe*_*i43 9 c# plinq

最近我对Linq和Plinq采取了一些措施.我无法看出Plinq在哪种情况下具有真正的显着优势.

我发现了许多例子,例如:

Enumerable.Range(0, 10000).AsParallel().ForAll(_ => Thread.Sleep(50000));
Run Code Online (Sandbox Code Playgroud)

这是完全没用的例子,因为它可以平均10000度,然后会更快10000倍,但在业务应用程序中很少循环10000次并制作"IO作业".

如果有人可以提一个例子,请发布.

Plinq仅适用于Linq to Objects和Linq to XML.不建议在webserver上运行的应用程序中使用它(它有自己的线程管理).因此,我们的机会减少到具有多个核心的桌面应用程序.

通常我会编写linq查询,这些查询在几分之一秒内按顺序运行.如果我平行化并且它真的会并行运行那么会更快,但是谁在乎呢?我认为它仍然足够快.最终用户不会看到任何差异.

我可以想象一个例子,当有人从数据库获取所有数据并在内存中运行查询时.也许这很有用,但这是一个错误的设计.

TPL是异步程序编程的好东西,但我仍然不确定Plinq是一个有用的工具.

有没有人有这方面的积极经验?

Bal*_*ick 9

您从PLINQ中获益的关键方案是这样的:

int[] src = Enumerable.Range(0, 100).ToArray();
var query = src.AsParallel()
               .Select(x => ExpensiveFunc(x));
Run Code Online (Sandbox Code Playgroud)

而你确实获得了真正的好处.

有关何时有用的详细信息,请参阅此处的文章.

例如,我正在尝试评估昂贵的迭代数值方法,以便从一组X点计算一系列Y值以进行绘图,我已经看到了好处.

  • 是的,我有.我正在使用24核机器,并且正在尝试计算1000个数据点,每个数据点需要大约200毫秒的数值抖动来单独计算.处理时间从大约3分钟减少到不到15秒,我的CPU在大多数核心上都得到了很好的最大化.PLINQ不是一个神奇的解决方案,但在某些情况下它会带来真正的好处.(在我的例子中,ExpensiveFunc中的代码正在进行迭代矩阵乘法,以计算半导体器件仿真的离散点电压) (3认同)