程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 非確定性計算引擎轉化為C#版本並重構

非確定性計算引擎轉化為C#版本並重構

編輯:C#入門知識

這是之前我寫的原始的 VB.NET 版本:

http://www.cnblogs.com/RChen/archive/2010/05/17/1737587.html

轉化為 C# 版本後,還進行了一些重構。包括修改成了強類型,以及使用了 Parallel.ForEach,但是發現沒有收到預期的效果。性能提升比較少。

研究後發現,其實問題的關鍵在於要通過某種方式對遍歷的可能性進行剪枝,這樣才能減少遍歷次數,從而提升性能。而且,由於結果是通過 yield return 和 IEnumerable 實現的,並沒有實現 IList 或者 Array. 所以它本質上並不支持按索引范圍拆分的 Parallel.ForEach 工作方式,而實際估計是使用的幾個 chunk 輪番讀取的低效方式,這樣在各個 chunk 之間就有線程同步的開銷,如前文所說。這個性能優化只好留待後面有空再繼續研究。

下面是目前的狀況的實現代碼:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Collections;    namespace NonDeterministicEngineCS {     class Program     {         static void Main(string[] args)         {             Benchmarking(new Action(Test1), "Test1() 執行完成,花費:{0}毫秒。");             Console.WriteLine("====================================================");             Benchmarking(new Action(Test2), "Test2() 執行完成,花費:{0}毫秒。");             Console.WriteLine("====================================================");             Benchmarking(new Action(Test3), "Test3() 執行完成,花費:{0}毫秒。");             Console.ReadLine();         }            // 一個簡單的測試例子         public static void Test1()         {             NonDeterministicEngine engine = new NonD

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved