在這裏咱們將介紹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