Parallel 试验
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Linq;
using System.Collections; class CQ_EnqueueDequeuePeek
{
public readonly static object lockObj = new object();
static void Main()
{
//int n=1000;
//var s1 = n + n * (n - 1) / 2;
//Console.WriteLine(s1);
//Console.WriteLine(1000*1000-s1);
//Console.ReadKey();
//return ;
CancellationTokenSource tokenSource = new CancellationTokenSource(); CancellationToken token = tokenSource.Token;
List<student> studentList = new List<student>();
for (long i = ; i < ; i++)
{
var stu = new student();
stu.age = i;
stu.id = i;
studentList.Add(stu);
}
List<teacher> teacherList = new List<teacher>();
for (long i = ; i < ; i++)
{
var t = new teacher();
t.id = i;
t.age = i;
teacherList.Add(t);
}
var ha = new Hashtable(); // 262151
Action[] actionList = new Action[];
ConcurrentBag<relation> relationList = new ConcurrentBag<relation>(); long index = ;
foreach (var stu in studentList)
{
foreach (var t in teacherList)
{
actionList[index] = () =>
{ relation re = new relation();
var age1 = stu.age;
var age2 = t.age;
re.age1 = age1;
re.age2 = age2;
re.value = age1 * age2;
relationList.Add(re);
lock (ha)
{
if (!ha.ContainsKey(re.value))
{
ha.Add(re.value, re.value);
}
} };
index++;
} }
Stopwatch s = new Stopwatch();
s.Start();
Parallel.ForEach(actionList, (a) =>
{
a();
});
s.Stop();
Console.WriteLine("总运行时间:" + s.Elapsed + "\r\n");
Console.WriteLine("运行结果不重复的有如下个:\r\n");
Console.WriteLine(relationList.Select(x => x.value).Distinct().LongCount());
Console.WriteLine("运行结果以及表达式如下:\r\n");
Console.WriteLine(string.Join("\r\n", relationList.Select(x => new { str = "age1:" + x.age1 + " age2:" + x.age2 + "=" + x.value }).Distinct()));
Console.WriteLine("运行数据大小:" + relationList.Count);
Console.ReadKey();
} } public class relation
{
public long age1;
public long age2;
public long value { get; set; }
}
public class student
{
internal long id; public student()
{
age = ;
}
public long age { get; set; }
} public class teacher
{
internal long id; public teacher()
{
age = ;
}
public long age { get; set; }
}
Parallel 试验的更多相关文章
- .Net多线程编程—System.Threading.Tasks.Parallel
System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...
- .net垃圾回收机制编程调试试验
1. 什么是CLR GC? 它是一个基于引用跟踪和代的垃圾回收器. 从本质上,它为系统中所有活跃对象都实现了一种引用跟踪模式,如果一个对象没有任何引用指向它,那么这个对象就被认为是垃圾对象,并且可以被 ...
- 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 ...
- 在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程
发现问题 需求很简单,大致就是要批量往数据库写数据,于是打算用Parallel并行的方式写入,希望能利用计算机多核特性加快程序执行速度.想的很美好,于是快速撸了类似下面的一串代码: using (va ...
- Intel.parallel.studio.xe.2015.Update.2.ISO-TBE 下载
磁力链下载点我 还有linux版本 Intel.parallel.studio.xe.2015.Update.1.LINUX.ISO-TBE 收集自网络,要跨请跨原作者,谢谢.
随机推荐
- Find the largest K numbers from array (找出数组中最大的K个值)
Recently i was doing some study on algorithms. A classic problem is to find the K largest(smallest) ...
- IDEA springMVC - hello world
记录所学,防忘记... ide用IDEA,用maven管理依赖包 1.建立一个maven-webapp项目:File->New->Project 2.pom.xml <project ...
- php中的魔术方法
__construct 构造器是一个魔术方法,当对象被实例化时它会被调用.在一个类声明时它常常是第一件做的事但是没得必要他也像其他任何方法在类中任何地方都可以声明,构造器也能像其他方法样继承.如果我们 ...
- Win8.1无法安装.NET Framework 3.5的解决办法
这个问题纠结了我很多天,恢复系统也没用,差点儿就重装Win8,现在终于解决了,你也来试试吧! 机型:台电X89 系统:Win8.1 with bing 故障:在未安装.NET Framework 3. ...
- Eclipse设置、调优、使用(转自)
转自http://yuanzhifei89.iteye.com/blog/974082 eclipse调优 一般在不对eclipse进行相关设置的时候,使用eclipse总是会觉得启动好慢,用起来好卡 ...
- 【工作笔记】BAT批处理学习笔记与示例
BAT批处理学习笔记 一.批注里定义:批处理文件是将一系列命令按一定的顺序集合为一个可执行的文本文件,其扩展名为BAT或者CMD,这些命令统称批处理命令. 二.常见的批处理指令: 命令清单: 1.RE ...
- DSP中的段
虽然,C语言是一种相对高效的高级语言,并且TI提供的C编译器还结合硬件特点支持三级优化功能,但生成的汇编代码效率仍可能会不尽人意.如作者预使用环型缓冲区管理功能,这就要求该缓冲区应被定位到相对特定的位 ...
- Net 通用权限管理系统源码 带数据库设计文档,部署说明文档
Net 通用权限管理系统源码 带数据库设计文档,部署说明文档 包括数据库设计文档部署安装文档源码数据库文件 下载地址:http://www.mallhd.com/archives/1389
- VB.net 调用dll
Public Declare Function APlayer_OpenA Lib "APlayerCaller.dll" (ByVal aplayer As Integer, B ...
- angularjs(一)基础概念
一.前言 前端技术的发展是如此之快,各种优秀技术.优秀框架的出现简直让人目不暇接,作为一名业界新秀,紧跟时代潮流,学习掌握新知识自然是不敢怠慢.当听到AngularJs这个名字并知道是google在维 ...