当前位置:编程学习 > C#/ASP.NET >>

非确定性计算引擎转化为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
补充:软件开发 , C# ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,