這是之前我寫的原始的 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