c# – PLinq本身比System.Threading.Tasks.Parallel.ForEach更快
简介:我从System.Threading.Tasks.Parallel.ForEach和Concurrent Data结构更改为简单的p
linq(Parallel
Linq)查询.加速是惊人的.
那么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); 笔记: 问题: >由于使用plinq vs Parallel.ForEach,速度是否提高?
我可以假设,因为我的模式基本上是功能性的(给输入产生没有变异的新输出),plinq是正确使用的技术吗? 我正在寻找验证我的假设是正确的,或者表明我错过了什么. 解决方法
根据您在样本中提供的有限信息(我在OP的评论中询问了更多详细信息),我猜测您会发现由于使用的分区算法而产生的差异.您应该在这篇博客文章中阅读
Chunk Partitioning vs. Range Partitioning,其中讨论了它们的不同之处以及它们可能最适合的工作类型.强烈建议您阅读该博客文章以及
this one,其中详细介绍了这两种类型以及可以使用的其他两种类型的分区,但不适用于您的样本,以及提供一些视觉帮助以更好地了解分区.最后,here’s yet another blog post讨论了工作分区以及当默认分区算法对您的特定工作负载没有意义时它如何影响您.该帖实际上是指一个很棒的程序,可以帮助您在
a set of parallel samples from the PFX team的工作中可视化分区程序.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- [Swift]LeetCode215. 数组中的第K个最大元素 | Kth Largest
- ruby-on-rails-3 – 如何在Prawn中的bounding_box中添加背景
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(10)----MVP矩
- NAND flash替换问题
- c# – 为什么在LINQ查询之后的GC释放了WhereListIterator,而
- 解决vue-router中的query动态传参问题
- c# – WPF支持触摸或多点触控屏幕?
- ruby-on-rails – Rails设计 – 管理员角色,模型与属性
- c# – Entity Framework 6和SQLite – 无法创建具有之前删除
- ios – Xcode断点灰色,不工作