最近我对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是一个有用的工具.
有没有人有这方面的积极经验?
您从PLINQ中获益的关键方案是这样的:
int[] src = Enumerable.Range(0, 100).ToArray();
var query = src.AsParallel()
.Select(x => ExpensiveFunc(x));
Run Code Online (Sandbox Code Playgroud)
而你确实获得了真正的好处.
有关何时有用的详细信息,请参阅此处的文章.
例如,我正在尝试评估昂贵的迭代数值方法,以便从一组X点计算一系列Y值以进行绘图,我已经看到了好处.
| 归档时间: |
|
| 查看次数: |
837 次 |
| 最近记录: |