最近我对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是一个有用的工具。
有人对此有积极的体验吗?
答案 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,因为它可以快速编写并且易于维护(可能以整体性能为代价)
我假设这里的商业案例是发展速度。