【300分散分,推荐一个不新不老的技术】我们写的程序真正用到多核了结构的能量了吗?

以专业开发人员为伍 2009-02-20 08:15:48
加精
假设我们要把一个目录下的所有文件和子目录复制到另外一个目录下,我们如何让运行时间只有原来的一半,甚至四分之一?!

首先你可以下载微软 Parallel Extensions to the .NET Framework 的2008年6月预览版,这是一个大概300k左右的dll,放入你的项目,可以引用他的 using System.Threading 命名空间,你就可以写出代码:
private static void CopyDir(DirectoryInfo s, DirectoryInfo d)
{
if (!d.Exists)
d.Create();
Parallel.Invoke(
() =>
{
Parallel.ForEach(s.GetFiles(), f =>
{
var t = new FileInfo(Path.Combine(d.FullName, f.Name));
f.CopyTo(t.FullName);
Total++;
});
},
() =>
{
Parallel.ForEach(s.GetDirectories(), subs =>
{
var subd = new DirectoryInfo(Path.Combine(d.FullName, subs.Name));
CopyDir(subs, subd);
});
});
}


这里,方法“Parallel.Invoke”是让作为其参数的两个匿名方法并行运行。而方法“Parallel.ForEach”则是让参数中的各个文件和子目录处理并行执行。我们可以这样写一个测试
private static TimeSpan Test()
{
var w = new Stopwatch();
w.Start();
CopyDir(new DirectoryInfo("e:\\test"), new DirectoryInfo("e:\\test1"));
w.Stop();
return w.Elapsed;
}


你的计算机是双核的?还是更多核的?不论有几核,我想当你对比了传统的顺序执行程序与这个程序的“效率”,都会印象深刻。


这个framework据说将集成为.net framework4.0中的核心功能之一。除了上面举例的两个功能以外,还包括了并行Linq等技术。不过我们现在就可以使用这个针对.net framework3.5的语言版组件来优化我们的报表计算等许多费时的工作。
...全文
5690 451 打赏 收藏 转发到动态 举报
写回复
用AI写文章
451 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlong224 2011-08-16
  • 打赏
  • 举报
回复
写的不错 linq.
lfywy 2010-04-27
  • 打赏
  • 举报
回复
UP~~~~~~~~~~~~
sy19871120 2010-04-20
  • 打赏
  • 举报
回复
人气好高啊,学习了
Mr蹇 2010-04-13
  • 打赏
  • 举报
回复
mark
sy19871120 2010-04-12
  • 打赏
  • 举报
回复
好东西
wellforever 2010-02-04
  • 打赏
  • 举报
回复
打酱油,接分..走人
huangsz0 2009-12-02
  • 打赏
  • 举报
回复
不错。先收藏了
ytc666 2009-11-26
  • 打赏
  • 举报
回复
学习
yrj_star 2009-08-21
  • 打赏
  • 举报
回复
这个技术太先进了,学习
HawKHB 2009-08-19
  • 打赏
  • 举报
回复
mark~
笑羽酣天 2009-07-16
  • 打赏
  • 举报
回复
收藏学习!
xutaozero21 2009-07-10
  • 打赏
  • 举报
回复
mark,已经下载了
jaffy 2009-04-09
  • 打赏
  • 举报
回复
太感谢了!正在入门
wucy2008 2009-04-09
  • 打赏
  • 举报
回复
^_^
zhifeng_wang 2009-04-09
  • 打赏
  • 举报
回复
好,有用,太及时了。
谢谢。
pzlin 2009-04-07
  • 打赏
  • 举报
回复
楼主的贴一定拜
npy601 2009-04-07
  • 打赏
  • 举报
回复
楼主很强,顶一下。
lee0822 2009-04-06
  • 打赏
  • 举报
回复
看不懂耶
antoniox 2009-04-06
  • 打赏
  • 举报
回复
顶一个
海倍娜楽 2009-04-05
  • 打赏
  • 举报
回复
谢谢LZ,Mark。。。
加载更多回复(419)

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧