.Net 4.0并行库实用性演练(前言)

  自VS2010发布近半年了,虽然整天想学习新东西,要更新到自己时,发现原来自己基本也很懒,2008还没用上多久呢,无奈被2010了。用了几天,IDE模样还是和05、08差不多,加了些小特性,以后慢慢体验吧,第一感觉启动速度慢多了。主要还是.Net 4.0的变化,其实也就是修修补补,语言特性几乎没什么新特性,C#多了个Dynamic,十年前VB就支持的晚绑定。只好把注意力放在了Framework上,新加的并行支持应该是最大的变化吧。

  VS2010发布会我也去过的,并行支持是一大卖点。当时记得台上一个MM对一个Linq查询语句加了个AsParallel(),性能就神奇地提高了一倍,台下掌声雷动。确实不费吹灰之力提高程序性能,是最能引起大家兴趣的。在看电子期刊时,看到冷冷同学,还有吴秦的文章,给偶这些菜鸟以震撼的启发,原来偶已经远远落在了在读大学生的后面。

  那就开始学吧,就拿Parallel开刀。先抓个垫背的:

static void Set( int length)
{
var array
= new int [length, length, length];
for ( int i = 0 ; i < length; i ++ )
for ( int j = 0 ; j < length; j ++ )
for ( int k = 0 ; k < length; k ++ )
array[i, j, k]
= System.Threading.Thread.CurrentThread.ManagedThreadId;
}

再请出真神:

static void ParallelSet( int length)
{
var array
= new int [length, length, length];
Parallel.For(
0 , length, i =>
{
for ( int j = 0 ; j < length; j ++ )
for ( int k = 0 ; k < length; k ++ )
array[i, j, k]
= System.Threading.Thread.CurrentThread.ManagedThreadId;
});
}

PK:

CodeTimer.Time( " Single thread " , 100 , () => Set( 100 ));
CodeTimer.Time(
" Multiple thread " , 100 , () => ParallelSet( 100 ));

 

结果,1136ms:729ms,果然不错。不过MSDN的例子说不定是被和谐过的,所以偶总会变变试验过程。果然发现另有乾坤。

转载于:https://www.cnblogs.com/XmNotes/archive/2010/09/07/1820419.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值