色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

VS2010&.Net 4.0 之并行運(yùn)算(Parallel)(For、Foreach)

  VS2010&.NET 4.0的Beta2相比Beta1在性能上有了很大的改進(jìn),已經(jīng)基本可以使用了。.NET 4.0給我們帶來(lái)許多新特性,如動(dòng)態(tài)類(lèi)型、云平臺(tái)、并行運(yùn)算等。本文討論一下.NET 4.0的并行運(yùn)算。

  其實(shí)并行運(yùn)算并不是在.NET 4.0才有的。大家都知道,通過(guò)增加CPU的主頻可以提高CPU的性能,但由于設(shè)計(jì)的限制,主頻是不可能無(wú)限制的提高。這個(gè)時(shí)候,把提高性能的方式轉(zhuǎn)向使用多個(gè)心(多核),現(xiàn)在的電腦幾乎都是多核的。但在軟件中并還沒(méi)有跟上這個(gè)節(jié)奏,大多數(shù)軟件還是采用傳統(tǒng)的方式,并沒(méi)有很好的發(fā)揮多核的優(yōu)勢(shì)。

  微軟的并行運(yùn)算平臺(tái)(Microsoft’s Parallel Computing Platform (PCP))提供了這樣一個(gè)工具,讓軟件開(kāi)發(fā)人員可以有效的使用多核提供的性能。本文就進(jìn)行一個(gè)簡(jiǎn)單的測(cè)試,來(lái)體驗(yàn)并行運(yùn)算的性能。

  1. 新建一個(gè)List,并在開(kāi)始時(shí)初始化

public static IList<int> Datas = new List<int>();       static void Main(string[] args)       {           InitializeData();           Console.Read();       }       /// <summary>       /// 初始化數(shù)據(jù)       /// </summary>       private static void InitializeData()       {           Datas.Clear();           for (int i = 0; i < 20; i++)           {               Datas.Add(i);           }       }

  2.設(shè)計(jì)耗時(shí)的方法,并來(lái)在各種運(yùn)算方式中調(diào)用

       /// <summary>      /// 獲得數(shù)據(jù)      /// </summary>      /// <param name="i"></param>      /// <returns></returns>      private static int GetData(int i)      {          System.Threading.Thread.Sleep(100);          return i;      }

  3. 設(shè)計(jì)一般的運(yùn)算方式,調(diào)用GetData方法

        /// <summary>       /// 采用一般for循環(huán)       /// </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.采用并行運(yùn)算的方式,調(diào)用GetData方法

        /// <summary>       /// 采用并行for循環(huán)       /// </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.最后采用老趙設(shè)計(jì)的CodeTimer來(lái)比較每一種運(yùn)算方式的耗時(shí),在Main函數(shù)中加入測(cè)試代碼

static void Main(string[] args)       {           InitializeData();           CodeTimer.Initialize();           CodeTimer.WriteDebug("一般for循環(huán):", 5, () => { UseFor(); });           CodeTimer.WriteDebug("一般foreach循環(huán):", 5, () => { UseForeach(); });           CodeTimer.WriteDebug("并行for循環(huán):", 5, () => { UseParalleFor(); });           CodeTimer.WriteDebug("并行foreach循環(huán):", 5, () => { UserParalleForeach(); });           Console.Read();       }

  6.運(yùn)算結(jié)果:

截圖00

  可以看出,并行運(yùn)算提高的性能還是比較明顯的。

  下面我們把GetData方法修改一下,把線程延遲的的代碼去掉

/// <summary>/// 獲得數(shù)據(jù)/// </summary>/// <param name="i"></param>/// <returns></returns>private static int GetData(int i){   // System.Threading.Thread.Sleep(100);    return i;}

  再次運(yùn)行

截圖01

  可以看出,這時(shí)候并行運(yùn)算不但沒(méi)降低消耗的時(shí)間,反而用了更多的時(shí)間。經(jīng)過(guò)多次測(cè)試發(fā)現(xiàn),采用并行運(yùn)算跟程序的設(shè)計(jì)結(jié)構(gòu)有很大的關(guān)系,如果設(shè)計(jì)不合理,反而會(huì)消耗更多時(shí)間。

NET技術(shù)VS2010&amp;amp;.Net 4.0 之并行運(yùn)算(Parallel)(For、Foreach),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 旌德县| 威远县| 平舆县| 江油市| 长丰县| 汉中市| 湖北省| 顺昌县| 襄垣县| 水城县| 饶阳县| 永宁县| 思茅市| 古田县| 屏山县| 通榆县| 香河县| 廊坊市| 新沂市| 松潘县| 拉萨市| 漳浦县| 长乐市| 闽侯县| 新巴尔虎右旗| 木兰县| 东至县| 台江县| 恩平市| 礼泉县| 桂阳县| 陇西县| 沁水县| 沁阳市| 忻城县| 廉江市| 天气| 平度市| 元阳县| 沧州市| 秦安县|