PLINQ有什么实际好处?

时间:2013-12-17 09:10:57

标签: c# plinq

最近我对Linq和Plinq采取了一些措施。 我无法看出Plinq在哪种情况下会带来真正的重大好处。

我找到了许多例子,例如:

Enumerable.Range(0, 10000).AsParallel().ForAll(_ => Thread.Sleep(50000));

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

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

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

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

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

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

有人对此有积极的体验吗?

2 个答案:

答案 0 :(得分:8)

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

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

你确实获得了真正的好处。

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

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

答案 1 :(得分:0)

尝试在更大的数据或更复杂的任务上进行此操作

_objects.AsParallel().Select(ConvertObject);

bool ConvertObject(object item)
{
//some long running task
}

我将PLinq用于许多数据仓库ETL,因为它可以快速编写并且易于维护(可能以整体性能为代价)

我假设这里的商业案例是发展速度。