非确定性计算引擎转化为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# ,
上一个:C# 完成端口组件实现精髓
下一个:C#动态获取鼠标坐标CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,