在这里咱们将介绍Visual Studio 2010并行运算的原理,但愿经过本文能对你们了解Visual Studio 2010并行运算。这也是你们比价关心的热点。javascript
Visual Studio 2010 Beta2&.Net 4.0的Beta2相比Beta1在性能上有了很大的改进,已经基本可使用了。.NET 4.0给咱们带来许多新特性,如动态类型、云平台、并行运算等。本文讨论一下.NET 4.0的并行运算。html
其实并行运算并非在.Net 4.0才有的。你们都知道,经过增长CPU的主频能够提升CPU的性能,但因为设计的限制,主频是不可能无限制的提升。这个时候,把提升性能的方式转向使用多个心(多核),如今的电脑几乎都是多核的。但在软件中并尚未跟上这个节奏,大多数软件仍是采用传统的方式,并无很好的发挥多核的优点。java
微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))提供了这样一个工具,让软件开发人员能够有效的使用多核提供的性能。本文就进行一个简单的测试,来体验Visual Studio 2010并行运算的性能。ide
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函数中加入测试代码this
- 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.运算结果:spa
能够看出,并行运算提升的性能仍是比较明显的。
下面咱们把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