浅谈Visual Studio 2010并行运算原理
在这里我们将介绍Visual Studio 2010并行运算的原理,希望通过本文能对大家了解Visual Studio 2010并行运算。这也是大家比价关心的热点。
Visual Studio 2010 Beta2&.Net 4.0的Beta2相比Beta1在性能上有了很大的改进,已经基本可以使用了。.NET 4.0给我们带来许多新特性,如动态类型、云平台、并行运算等。本文讨论一下.NET 4.0的并行运算。
其实并行运算并不是在.Net 4.0才有的。大家都知道,通过增加CPU的主频可以提高CPU的性能,但由于设计的限制,主频是不可能无限制的提高。这个时候,把提高性能的方式转向使用多个心(多核),现在的电脑几乎都是多核的。但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。
微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。本文就进行一个简单的测试,来体验Visual Studio 2010并行运算的性能。
1. 新建一个List,并在开始时初始化
- public static IList<int> Datas = new List<int>();
- static void Main(string[] args)
- {
- InitializeData();
- Console.Read();
- }
- /// <summary>
- /// 初始化数据
- /// </summary>
- private static void InitializeData()
- {
- Datas.Clear();
- for (int i = 0; i < 20; i++)
- {
- Datas.Add(i);
- }
- }
2.设计耗时的方法,并来在各种运算方式中调用
- /// <summary>
- /// 获得数据
- /// </summary>
- /// <param name="i"></param>
- /// <returns></returns>
- private static int GetData(int i)
- {
- System.Threading.Thread.Sleep(100);
- return i;
- }
3. 设计一般的运算方式,调用GetData方法
- /// <summary>
- /// 采用一般for循环
- /// </summary>
- private static void UseFor()
- {
- for (int i = 0; i < 20; i++)
- {
- GetData(Datas[i]);
- }
- }
- /// <summary>
- /// 采用一般的foreach
- /// </summary>
- private static void UseForeach()
- {
- foreach (var item in Datas)
- {
- GetData(item);
- }
- }
4.采用并行运算的方式,调用GetData方法
- /// <summary>
- /// 采用并行for循环
- /// </summary>
- private static void UseParalleFor()
- {
- Parallel.For(0, 20, (i) =>
- {
- GetData(Datas[i]);
- });
- }
- /// <summary>
- /// 采用并行的foreach
- /// </summary>
- private static void UserParalleForeach()
- {
- Parallel.ForEach(Datas, (t) => { GetData(t); });
- }
5.最后采用老赵设计的CodeTimer来比较每一种运算方式的耗时,在Main函数中加入测试代码
- static void Main(string[] args)
- {
- InitializeData();
- CodeTimer.Initialize();
- CodeTimer.WriteDebug("一般for循环:", 5, () => { UseFor(); });
- CodeTimer.WriteDebug("一般foreach循环:", 5, () => { UseForeach(); });
- CodeTimer.WriteDebug("并行for循环:", 5, () => { UseParalleFor(); });
- CodeTimer.WriteDebug("并行foreach循环:", 5, () => { UserParalleForeach(); });
- Console.Read();
- }
6.运算结果:
可以看出,并行运算提高的性能还是比较明显的。
下面我们把GetData方法修改一下,把线程延迟的的代码去掉
- /// <summary>
- /// 获得数据
- /// </summary>
- /// <param name="i"></param>
- /// <returns></returns>
- private static int GetData(int i)
- {
- // System.Threading.Thread.Sleep(100);
- return i;
- }
再次运行
可以看出,这时候并行运算不但没降低消耗的时间,反而用了更多的时间。经过多次测试发现,采用并行运算跟程序的设计结构有很大的关系,如果设计不合理,反而会消耗更多时间。
原文标题:VS2010&.Net 4.0 之并行运算(Parallel)(For、Foreach)
链接:http://www.cnblogs.com/zya-gis/archive/2009/10/24/1589216.html
转载于:https://blog.51cto.com/yuanzhitang/500235
浅谈Visual Studio 2010并行运算原理相关推荐
- 一起谈.NET技术,Visual Studio 2010 中的代码约定设置
软件约定称为代码约定,通过这一约定可以表示代码正常工作所需的正式条件. 如果方法未按预期收到数据或生成的数据不符合预期的后置条件,代码约定将导致代码引发异常. 有关前置条件和后置条件的概述,您可能需要 ...
- Visual Studio 2010 Ultimate敏捷利剑:详解Scrum
随着微软Visual Studio 2010 Ultimate Beta2版本的发布,除了它提供协同一致的ALM(应用程序生命周期)管理工具外,MSF for Agile Software Devel ...
- [转载]Visual Studio 2010敏捷利剑:详解Scrum
Visual Studio 2010敏捷利剑:详解Scrum [IT168 专稿]随着微软Visual Studio 2010 Ultimate Beta2版本的发布,除了它提供协同一致的ALM(应用 ...
- 我眼中的Visual Studio 2010架构工具
影响架构质量的是构建体系架构的思想.原则.实践与架构师的经验,绝不是工具.即使是最优秀的架构工具,也不可能像倚天宝剑一般--倚天一出,谁与争锋--似乎谁握住了这把利刃,就能够成为武林盟主.架构工具可以 ...
- Visual Studio 2010 的新机遇
中国是全世界最重要的开发工具市场之一,这主要体现在两个方面:首先,中国拥有150万专业开发人员,占全球第二位.其次,中国拥有250万IT专业人员,很多高级IT专业人员在程序编译或者办公软件的自动化方面 ...
- Visual Studio 2010 Ultimate敏捷测试驱动开发
在微软Visual Studio 2010 Ultimate Beta2版本中,MSF for Agile Software Development 5.0过程框架,是以Scrum模型为基础导向扩展, ...
- 我眼中的Visual Studio 2010架“.NET研究”构工具
影响架构质量的是构建体系架构的思想.原则.实践与架构师的经验,绝不是工具.即使是最优秀的架构工具,也不可能像倚天宝剑一般--倚天一出,谁与争锋--似乎谁握住了这把利刃,就能够成为武林盟主.架构工具可以 ...
- Visual Studio 2010带来的新机遇、新特性和新动力
新机遇:一键实现部署云计算开发 当前, 微软最新的战略和愿景是"三屏一云",即怎样通过互联网.以软件为主体,通过不同的设备为广大客户带来无缝体验.主旨就是研究怎样将互联网和数据中心 ...
- 小旋风asp iis_ASP 4-绕.NET 4(和Visual Studio 2010)Beta 1的旋风之旅
小旋风asp iis Hey, we released Visual Studio 2010 Beta 1. JasonZ has a great post with piles of details ...
- Visual Studio 2010中国团队的研发内幕
--微软Visual Studio商业软件部总经理潘正磊专访 文 / 霍泰稳 常政 随着2010年4月12日微软官方正式颁布"Visual Studio 2010"的日期临近,无数 ...
最新文章
- memcached在windows下的基本使用方法
- 说说如何搭建 Nginx 反向代理 Tomcat
- Linux学习 Unit 9
- jersey客户端_项目学生:带有Jersey的Web服务客户端
- java 批量处理 示例_Java中异常处理的示例
- netcore开源框架_Mono和.NET Core 从比翼双飞到合体
- AIO系列文档(1)----图解ByteBuffer
- 解决oracle11g连接失败 ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
- N天学习一个Linux命令之grep
- jxta-P2P学习
- 总有一些声音令人热血澎湃
- 天蝎座2019年4月运势
- win10计算机管理器端口号,Win10设备管理器没有端口选项的解决方法
- 游戏设计师:如何对待高考倒数100天
- 在Oracle中执行动态SQL的几种方法------转载
- 萃余液P507/P204除油工艺
- LOL进游戏,游戏界面全黑(不是进入峡谷)解决办法(亲测)
- visio模板#科研绘图#visio#技术路线图#文献汇报思路
- lua——很好很强大的脚本语言
- 【Win10瘦身技巧】禁用Windows索引功能
热门文章
- ArcGIS Pro 有多强大?(一)
- mysql导入sql文件乱码或者报错unknown command
- linux获取cpu数量函数,Linux上获取CPU Core个数的实现
- mysql日志打开_MySql 打开日志文件
- jQuery-zTree插件使用
- java类加载器ClassLoader浅析
- android通用对话框,android-所有活动中的“通用”对话框
- icp光谱仪的工作原理_创想仪器(GLMY)光电直读光谱仪和X荧光光谱仪的区别
- 我发现混的好的,都是挺能“吹牛逼”的
- java集成agent作用_javaagent 基于 javaagent 开发的 APM 工具,收集方法的执行次数和执行时间,定时输出成 json 格式 @codeKK Android开源站...