自VS2010发布近半年了,虽然整天想学习新东西,要更新到自己时,发现原来自己基本也很懒,2008还没用上多久呢,无奈被2010了。用了几天,IDE模样还是和05、08差不多,加了些小特性,以后慢慢体验吧,第一感觉启动速度慢多了。主要还是.Net 4.0的变化,其实也就是修修补补,语言特性几乎没什么新特性,C#多了个Dynamic,十年前VB就支持的晚绑定。只好把注意力放在了Framework上,新加的并行支持应该是最大的变化吧。
VS2010发布会我也去过的,并行支持是一大卖点。当时记得台上一个MM对一个Linq查询语句加了个AsParallel(),性能就神奇地提高了一倍,台下掌声雷动。确实不费吹灰之力提高程序性能,是最能引起大家兴趣的。在看电子期刊时,看到冷冷同学,还有吴秦的文章,给偶这些菜鸟以震撼的启发,原来偶已经远远落在了在读大学生的后面。
那就开始学吧,就拿Parallel开刀。先抓个垫背的:
staticvoid Set(int length)
{
var array =newint[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;
}
{
var array =newint[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;
}
再请出真神:
staticvoid ParallelSet(int length)
{
var array =newint[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;
});
}
{
var array =newint[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));
CodeTimer.Time("Multiple thread", 100, () => ParallelSet(100));
结果,1136ms:729ms,果然不错。不过MSDN的例子说不定是被和谐过的,所以偶总会变变试验过程。果然发现另有乾坤。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步