从PLINQ中获得了任何真正的好处

本文关键字:任何真 PLINQ 获得了 | 更新日期: 2024-10-22 10:05:49

最近我对Linq和Plinq做了一些度量。我看不出普林克在哪种情况下有真正的重大好处。

我发现了很多例子,比如:

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

这是一个完全无用的例子,因为它可以与10000度并行,是的,然后速度会快10000倍,但在业务应用程序中很少循环10000次并生成"IO作业"。

如果有人能提到一个例子,请把它贴出来。

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

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

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

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

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

从PLINQ中获得了任何真正的好处

从PLINQ中获益的关键场景如下:

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

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

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

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

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

_objects.AsParallel().Select(ConvertObject);
bool ConvertObject(object item)
{
//some long running task
}

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

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