在这里我们将介绍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,并在开始时初始化

  1. public static IList<int> Datas = new List<int>();
  2. static void Main(string[] args)
  3. {
  4. InitializeData();
  5. Console.Read();
  6. }
  7. /// <summary>
  8. /// 初始化数据
  9. /// </summary>
  10. private static void InitializeData()
  11. {
  12. Datas.Clear();
  13. for (int i = 0; i < 20; i++)
  14. {
  15. Datas.Add(i);
  16. }
  17. }

2.设计耗时的方法,并来在各种运算方式中调用

  1. /// <summary>
  2. /// 获得数据
  3. /// </summary>
  4. /// <param name="i"></param>
  5. /// <returns></returns>
  6. private static int GetData(int i)
  7. {
  8. System.Threading.Thread.Sleep(100);
  9. return i;
  10. }

3. 设计一般的运算方式,调用GetData方法

  1. /// <summary>
  2. /// 采用一般for循环
  3. /// </summary>
  4. private static void UseFor()
  5. {
  6. for (int i = 0; i < 20; i++)
  7. {
  8. GetData(Datas[i]);
  9. }
  10. }
  11. /// <summary>
  12. /// 采用一般的foreach
  13. /// </summary>
  14. private static void UseForeach()
  15. {
  16. foreach (var item in Datas)
  17. {
  18. GetData(item);
  19. }
  20. }

4.采用并行运算的方式,调用GetData方法

  1. /// <summary>
  2. /// 采用并行for循环
  3. /// </summary>
  4. private static void UseParalleFor()
  5. {
  6. Parallel.For(0, 20, (i) =>
  7. {
  8. GetData(Datas[i]);
  9. });
  10. }
  11. /// <summary>
  12. /// 采用并行的foreach
  13. /// </summary>
  14. private static void UserParalleForeach()
  15. {
  16. Parallel.ForEach(Datas, (t) => { GetData(t); });
  17. }

5.最后采用老赵设计的CodeTimer来比较每一种运算方式的耗时,在Main函数中加入测试代码

  1. static void Main(string[] args)
  2. {
  3. InitializeData();
  4. CodeTimer.Initialize();
  5. CodeTimer.WriteDebug("一般for循环:", 5, () => { UseFor(); });
  6. CodeTimer.WriteDebug("一般foreach循环:", 5, () => { UseForeach(); });
  7. CodeTimer.WriteDebug("并行for循环:", 5, () => { UseParalleFor(); });
  8. CodeTimer.WriteDebug("并行foreach循环:", 5, () => { UserParalleForeach(); });
  9. Console.Read();
  10. }

6.运算结果:

可以看出,并行运算提高的性能还是比较明显的。

下面我们把GetData方法修改一下,把线程延迟的的代码去掉

  1. /// <summary>
  2. /// 获得数据
  3. /// </summary>
  4. /// <param name="i"></param>
  5. /// <returns></returns>
  6. private static int GetData(int i)
  7. {
  8. // System.Threading.Thread.Sleep(100);
  9. return i;
  10. }

再次运行

可以看出,这时候并行运算不但没降低消耗的时间,反而用了更多的时间。经过多次测试发现,采用并行运算跟程序的设计结构有很大的关系,如果设计不合理,反而会消耗更多时间。

原文标题: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并行运算原理相关推荐

  1. 一起谈.NET技术,Visual Studio 2010 中的代码约定设置

    软件约定称为代码约定,通过这一约定可以表示代码正常工作所需的正式条件. 如果方法未按预期收到数据或生成的数据不符合预期的后置条件,代码约定将导致代码引发异常. 有关前置条件和后置条件的概述,您可能需要 ...

  2. Visual Studio 2010 Ultimate敏捷利剑:详解Scrum

    随着微软Visual Studio 2010 Ultimate Beta2版本的发布,除了它提供协同一致的ALM(应用程序生命周期)管理工具外,MSF for Agile Software Devel ...

  3. [转载]Visual Studio 2010敏捷利剑:详解Scrum

    Visual Studio 2010敏捷利剑:详解Scrum [IT168 专稿]随着微软Visual Studio 2010 Ultimate Beta2版本的发布,除了它提供协同一致的ALM(应用 ...

  4. 我眼中的Visual Studio 2010架构工具

    影响架构质量的是构建体系架构的思想.原则.实践与架构师的经验,绝不是工具.即使是最优秀的架构工具,也不可能像倚天宝剑一般--倚天一出,谁与争锋--似乎谁握住了这把利刃,就能够成为武林盟主.架构工具可以 ...

  5. Visual Studio 2010 的新机遇

    中国是全世界最重要的开发工具市场之一,这主要体现在两个方面:首先,中国拥有150万专业开发人员,占全球第二位.其次,中国拥有250万IT专业人员,很多高级IT专业人员在程序编译或者办公软件的自动化方面 ...

  6. Visual Studio 2010 Ultimate敏捷测试驱动开发

    在微软Visual Studio 2010 Ultimate Beta2版本中,MSF for Agile Software Development 5.0过程框架,是以Scrum模型为基础导向扩展, ...

  7. 我眼中的Visual Studio 2010架“.NET研究”构工具

    影响架构质量的是构建体系架构的思想.原则.实践与架构师的经验,绝不是工具.即使是最优秀的架构工具,也不可能像倚天宝剑一般--倚天一出,谁与争锋--似乎谁握住了这把利刃,就能够成为武林盟主.架构工具可以 ...

  8. Visual Studio 2010带来的新机遇、新特性和新动力

    新机遇:一键实现部署云计算开发 当前, 微软最新的战略和愿景是"三屏一云",即怎样通过互联网.以软件为主体,通过不同的设备为广大客户带来无缝体验.主旨就是研究怎样将互联网和数据中心 ...

  9. 小旋风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 ...

  10. Visual Studio 2010中国团队的研发内幕

    --微软Visual Studio商业软件部总经理潘正磊专访 文 / 霍泰稳 常政 随着2010年4月12日微软官方正式颁布"Visual Studio 2010"的日期临近,无数 ...

最新文章

  1. memcached在windows下的基本使用方法
  2. 说说如何搭建 Nginx 反向代理 Tomcat
  3. Linux学习 Unit 9
  4. jersey客户端_项目学生:带有Jersey的Web服务客户端
  5. java 批量处理 示例_Java中异常处理的示例
  6. netcore开源框架_Mono和.NET Core 从比翼双飞到合体
  7. AIO系列文档(1)----图解ByteBuffer
  8. 解决oracle11g连接失败 ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
  9. N天学习一个Linux命令之grep
  10. jxta-P2P学习
  11. 总有一些声音令人热血澎湃
  12. 天蝎座2019年4月运势
  13. win10计算机管理器端口号,Win10设备管理器没有端口选项的解决方法
  14. 游戏设计师:如何对待高考倒数100天
  15. 在Oracle中执行动态SQL的几种方法------转载
  16. 萃余液P507/P204除油工艺
  17. LOL进游戏,游戏界面全黑(不是进入峡谷)解决办法(亲测)
  18. visio模板#科研绘图#visio#技术路线图#文献汇报思路
  19. lua——很好很强大的脚本语言
  20. 【Win10瘦身技巧】禁用Windows索引功能

热门文章

  1. ArcGIS Pro 有多强大?(一)
  2. mysql导入sql文件乱码或者报错unknown command
  3. linux获取cpu数量函数,Linux上获取CPU Core个数的实现
  4. mysql日志打开_MySql 打开日志文件
  5. jQuery-zTree插件使用
  6. java类加载器ClassLoader浅析
  7. android通用对话框,android-所有活动中的“通用”对话框
  8. icp光谱仪的工作原理_创想仪器(GLMY)光电直读光谱仪和X荧光光谱仪的区别
  9. 我发现混的好的,都是挺能“吹牛逼”的
  10. java集成agent作用_javaagent 基于 javaagent 开发的 APM 工具,收集方法的执行次数和执行时间,定时输出成 json 格式 @codeKK Android开源站...