那么plinq固有地比Parallel.ForEach更快吗?或者它是否特定于任务.
// Original Code // concurrent dictionary to store results var resultDict = new ConcurrentDictionary<string,MyResultType>(); Parallel.ForEach(items,item => { resultDict.TryAdd(item.Name,PerformWork(source)); }); // new code var results = items .AsParallel() .Select(item => new { item.Name,queryResult = PerformWork(item) }) .ToDictionary(kv => kv.sourceName,kv => kv.queryResult);
笔记:
每个任务(PerformWork)现在运行0到200毫秒.在我优化它之前,它需要更长的时间.这就是我在第一个地方使用Tasks.Parallel库的原因.所以我从总时间的2秒到约100-200毫秒的总时间,执行大致相同的工作,只是使用不同的方法. (哇linq和plinq真棒!)
问题:
>由于使用plinq vs Parallel.ForEach,速度是否提高?
>它只是简单地删除并发数据结构(ConcurrentDictionary)? (因为它不需要同步线程).
>基于此related question的答案
Whereas PLINQ is largely based on a functional style of programming with no side-effects,side-effects are precisely what the TPL is for. If you want to actually do work in parallel as opposed to just searching/selecting things in parallel,you use the TPL.
我可以假设,因为我的模式基本上是功能性的(给输入产生没有变异的新输出),plinq是正确使用的技术吗?
我正在寻找验证我的假设是正确的,或者表明我错过了什么.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。