Parallel小记
List<Temp> tList = new List<Temp>();
for (int i = ; i < ; i++)
{
tList.Add(new Temp()
{
id = i,
name = string.Concat("test", i),
age = i *
});
}
object obj = new object();
List<TempChild> resultList = new List<TempChild>();
Stopwatch sc = new Stopwatch();
Stopwatch sc1 = new Stopwatch();
Stopwatch sc2 = new Stopwatch();
sc.Start();
Parallel.ForEach(tList, item =>
{
List<TempChild> tempChildList = LoadChildList();
if (null != tempChildList && tempChildList.Count > )
{
lock (obj)//一定要加锁,不然会出异常【目标数组长度不够,请检查destIndex和长度以及数组下限】
{
resultList.AddRange(tempChildList);
}
}
});
sc.Stop();
long second = sc.ElapsedMilliseconds;
List<TempChild> resultList1 = new List<TempChild>();
sc1.Start();
foreach (var item in tList)
{
List<TempChild> tempChildList = LoadChildList();
if (null != tempChildList && tempChildList.Count > )
{
resultList1.AddRange(tempChildList);
}
}
sc1.Stop();
long second2 = sc1.ElapsedMilliseconds; sc2.Start();
List<TempChild> resultList2 = tList
.AsParallel()
.SelectMany(
(item) =>
{
return LoadChildList();
}).ToList();
sc2.Stop();
long second3 = sc2.ElapsedMilliseconds;
private static List<TempChild> LoadChildList()
{
List<TempChild> tList = new List<TempChild>();
for (int i = 1; i < 100; i++)
{
tList.Add(new TempChild()
{
id = i,
name = string.Concat("test", i),
age = i * 2,
addr = i.ToString()
});
}
return tList;
}
分别对不同数据量级的并行任务执行对比,三种方式结果如下:





百万数量级,电脑崩了,没有测试结果~@@!!
由此,一般的list没必要并行执行,foreach足以。
Parallel小记的更多相关文章
- .Net多线程编程—System.Threading.Tasks.Parallel
System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...
- [原]Paste.deploy 与 WSGI, keystone 小记
Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...
- Java 8函数编程轻松入门(五)并行化(parallel)
1.并发与并行的区别 并发: 一个时间段内有几个程序都处于已启动到运行完毕之间,且这几个程序都是在同一个处理机上运行.但在任一个时刻点只有一个程序在处理机上运行 并行: 在同一个时刻,多核处理多个任务 ...
- Parallel并行之乱用
关于Parallel我也不细说了,一则微软封装的很好用,二来介绍这个的遍地都是. 我要说的是,要想成为一个优秀的标题党,一定要把重点放到别的地方,为了节省大家阅读时间,我先把结论说了,然后再慢慢从头说 ...
- 代码的坏味道(12)——平行继承体系(Parallel Inheritance Hierarchies)
坏味道--平行继承体系(Parallel Inheritance Hierarchies) 平行继承体系(Parallel Inheritance Hierarchies) 其实是 霰弹式修改(Sho ...
- 多线程之任务: Task 基础, 多任务并行执行, 并行运算(Parallel)
Task - 基于线程池的任务(在 System.Threading.Tasks 命名空间下) 多 Task 的并行执行 Parallel - 并行计算(在 System.Threading.Task ...
- Parallel.Foreach
随着多核时代的到来,并行开发越来越展示出它的强大威力! 使用并行程序,充分的利用系统资源,提高程序的性能.在.net 4.0中,微软给我们提供了一个新的命名空间:System.Threading.Ta ...
- MySql 小记
MySql 简单 小记 以备查看 1.sql概述 1.什么是sql? 2.sql发展过程? 3.sql标准与方言的关系? 4.常用数据库? 5.MySql数据库安装? 2.关键概念 表结构----- ...
- 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程
发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (va ...
随机推荐
- python 文件路径操作方法(转)
Python编程语言在实际使用中可以帮助我们轻松的实现一些特殊的功能需求.在这里我们将会为大家详细介绍一下有关Python文件路径的相关操作技巧,从而方便我们在实际开发中获得一些帮助. Python文 ...
- hdu6086(AC 自动机)
hdu6086 题意 字符串只由 \(01\) 组成,求长度为 \(2L\) 且包含给定的 \(n\) 个子串的字符串的个数(且要求字符串满足 \(s[i] \neq s[|s| - i + 1]\) ...
- [POJ1801]Formula Racing(模拟)
Formula Racing Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 289 Accepted: 77 Descr ...
- [BZOJ 2743] 采花
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2743 Algorithm: 此题询问区间内出现次数超过1个的数字 明显在线做无从下手,无 ...
- [Contest20180328]coin
转化一下,相当于从$0$跳到$M$,每一步跳跃距离为$v_i$中的某个,每次跳跃距离不大于上一次,统计方案数 用$f_{i,j,k}$表示跳到$i$,第一步跳$v_j$,最后一步跳$\geq v_k$ ...
- 【MySQL笔记】MySql5安装图解教程
MySql5.6Window超详细安装教程 2015-06-23 0个评论 来源:林炳文Evankaka的专栏 收藏 我要投稿 一.安装包准备 1.下载MySql5.6 ht ...
- 【转载】linux2.6内核initrd机制解析
题记 很久之前就分析过这部分内容,但是那个时候不够深入,姑且知道这么个东西存在,到底怎么用,来龙去脉咋回事就不知道了.前段时间工作上遇到了一个initrd的问题,没办法只能再去研究研究,还好,有点眉目 ...
- Delphi Thread
Thread给几点说明:1.MyThread的实例作为TForm1的成员变量2.不要使用Form1这个全局变量,线程中可要使用它的Handle,你可以在Form中创建MyThread的实例时把Hand ...
- 修改nvm镜像地址
最近几个项目切换开发要求Node版本不一样,没法运行.需要用nvm或n等来管理node版本,选谁见仁见智了,反正我选了nvm. 下载个node慢得要死,等半天结果还失败,真是窝火.官方文档又详细过了一 ...
- JS中的import和require区别
1.import xx from yy的方式是静态编译,即编译时加载,要写在文件的最上头,但是import()函数可以实现动态加载,写在任何地方 2.require是动态加载,即运行时加载,理论上可以 ...