文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>.NET 4.0并行计算测试

.NET 4.0并行计算测试

时间:2011-02-06  来源:saville

首先进行一下简单计算的测试,实现从1到10000000的累加。

代码
static void SimpleTest()
{
Stopwatch watch
= new Stopwatch();
watch.Start();
Parallel.For(
1, 10000000, (i) => { i ++; });
watch.Stop();
Console.WriteLine(
"Parallel test:" + watch.ElapsedMilliseconds.ToString());
watch.Restart();
for (int i = 1; i < 10000000; i++)
{
i
++;
}
watch.Stop();
Console.WriteLine(
"test:" + watch.ElapsedMilliseconds.ToString());
}

 测试结果如下:

不是吧?并行计算效果怎么还不如普通的for循环呢?查询了一下MSDN顿时释然了,当并行循环运行时,TPL 会对数据源进行分区,以便循环能够同时对多个部分进行操作,而对数据进行分区势必带来一定的开销,从而导致这类简单计算性能降低。

那就测试一下复杂一点的计算吧,试试斐波那契数列的计算。

代码
static long Fibonacci(this int i)
{
long sum;
if (i == 0)
{
sum
= 0;
}
else if (i == 1)
{
sum
= 1;
}
else
{
sum
= Fibonacci(i - 2) + Fibonacci(i - 1);
}
return sum;
}
代码
static void FibonacciTest(int times)
{
Stopwatch watch
= new Stopwatch();
watch.Start();
Parallel.For(
0, times, (i) => { i.Fibonacci(); });
watch.Stop();
Console.WriteLine(
"Parallel test:" + watch.ElapsedMilliseconds.ToString());
watch.Restart();
for (int i = 0; i < times; i++)
{
i.Fibonacci();
}
watch.Stop();
Console.WriteLine(
"test:" + watch.ElapsedMilliseconds.ToString());
}

对以上代码进行40次循环的测试,测试结果如下:

性能的提升还是十分明显的,而且随着循环次数的增加,差距还会进一步拉大。

最后再看看PLINQ的效果。

代码
static void PLinqTest()
{
string[] words = new string [] { "c#", "VB", "F#", "Linq", "PLinq", "VJ"};
var p
= from c in words.AsParallel()
select c;
Console.WriteLine(
"PLinq Result:");
foreach (string str in p)
{
Console.Write(str);
Console.Write(
" ");
}
Console.WriteLine(
" ");
var q
= from c in words
select c;
Console.WriteLine(
"Linq Result:");
foreach (string str in q)
{
Console.Write(str);
Console.Write(
" ");
}
Console.WriteLine(
" ");
}

测试结果如下:

第一次

第二次

很显然,启用PLINQ后,字符串的显示顺序是随机的,这就是并行计算在起作用。

 

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载