.NET(C#):警惕PLINQ结果的无序性
.NET(C#):警惕PLINQ结果的无序性
PLINQ的运行结果是无序的,也就是不保持原来集合的顺序来操作(当然除了一些专门的排序操作)。原因则是线程的并发执行本来就充满了不确定性,把原来一个任务分割成好几个部分同时进行返回的结果会打乱原来的顺序,如果要强制保留顺序,肯定要浪费一些性能,PLINQ是可以这样的,但默认不这样。
先看一个LINQ示例:
var arr = new int[] { 1, 2, 3, 4, 5 };
var res = arr.Where(i => i != 3);
结果是:
1, 2, 4, 5
顺序是保持的。而PLINQ:
var res = arr.AsParallel().Where(i => i != 3);
结果顺序变了:
1, 4, 5, 2
使用PLINQ的AsOrdered和AsUnordered可以命令PLINQ执行保留原集合顺序或者不保留。
把上面的PLINQ改成:
var res = arr.AsParallel().AsOrdered().Where(i => i != 3);
结果就是:1, 2, 4, 5了。
不过如果对PLINQ集合进行了排序那么后续操作会自动保持顺序,就像调用了AsOrdered。
var res = arr.AsParallel().OrderBy(i => i).Where(i => i != 3);
结果也是:1, 2, 4, 5了。
注意某些PLINQ方法如果没有保持顺序执行意义不大,比如Reverse方法:
var res = arr.AsParallel().Reverse();
结果会是:
5, 3, 2, 1, 4
转载于:https://www.cnblogs.com/micro-chen/p/8178753.html
.NET(C#):警惕PLINQ结果的无序性相关推荐
- 警惕技术人员的极端性
警惕技术人员的极端性 以前一直在研究技术,没日没夜的学习,后来发现:把技术玩的转,那不算什么大的本事,把人玩的转,才是本事.看到多,接触的多,思考的多了,感触也自然多了. 很多的技术朋友,在没有搞技术 ...
- golang map的无序性验证
map的无序性 大量数据如果没有写入,只是读取不会出错 var wg sync.WaitGroupm := make(map[int]int)for i := 0; i < 10000; i++ ...
- 点云的无序性_基于深度学习的激光雷达点云物体识别方法总结
0. 前言: 激光雷达作为自动驾驶不可或缺的传感器,随着价格不断下降,各种基于深度学习的模型也层出不穷(坐等马斯克打脸); 激光雷达物体识别的任务: 输入: 激光点云(x, y, z, intensi ...
- 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。
import java.util.HashSet; import java.util.Scanner; import java.util.Set;/*** 小易最近在数学课上学习到了集合的概念,集合有 ...
- C# 实现多分屏视频播放-自定义控件集合无序性问题
参考:自定义控件使其填充方格且自动变换大小文章,据此生成了多分屏的视频播放器.这里需要注意Controls的数组的无序性. 这里看下自定义控件的代码: using System; using Syst ...
- 点云的无序性_PU-Net:解决3D点云数据的上采样问题
作者:Danny明泽 论文下载: https://openaccess.thecvf.com/content_cvpr_2018/papers/Yu_PU-Net_Point_Cloud_CVPR_2 ...
- HashMap有序性与无序性阐述
1.插入无序 public class HashMapTest {public static void main(String[] args) {HashMap<String, String&g ...
- HashMap遍历有序性问题——map.entrySet()的无序性
在LeetCode刷题的时候,在一道返回 字符串中最早出现的只出现一次的字符下标的题目中,使用大HashMap的遍历方式,我选择了使用map.entrySet()获取节点集合的方式进行遍历. 题目和代 ...
- 拒绝传统电销无序性,智能外呼系统规范电销全流程
电销模式的存在由来已久,也在时间的长河里迭代更新,最早期一个小规模的公司,配备几个人+几台座机,就可以风生水起地开展业务,再后来连座机都不用,人手一个手机就可以随时随地做电销,但随着社会经济的发展和市 ...
最新文章
- 但有很多的HTML5朋友
- 通用寄存器:地址指针寄存器,数据寄存器,变址寄存器
- 信息学奥赛一本通 1342:【例4-1】最短路径问题
- Oracle 数据块 Block 说明
- php能干哪些副业,做副业,在能干的基础上踏实肯干
- 你真的了解JS数组的那些方法吗?
- Service绑定模式
- Python SQLite教程
- mysql建帐号数据库出现反斜线_[MySQL FAQ]系列 -- 账号密码包含反斜线时怎么办-阿里云开发者社区...
- 移动端日期插件rolldate
- 计算机怎么设置本地硬盘启动,怎么设置移动硬盘启动
- 两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
- [2011-04-24]商学院是干什么的?
- tkinter canvas jpg_1分钟教你将JPG图片转为CAD文件,简单到没朋友,小白必看
- JS通用表单验证函数
- 万能转换:R图转成Word、PPT、Excel、HTML、Latex、矢量图等
- jsp mysql火车票预定系统_火车票网络订票售票系统的设计与实现(NetBeans,MySQL)
- 零基础学习java大数据真的难吗?
- 【java设计模式 】类图表示、软件设计原则
- python练习题二