2025年3月29日 星期六 甲辰(龙)年 月廿八 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

Parallel.For和普通For的区别

时间:12-19来源:作者:点击数:23

Parallel类是.NET 4中新增的抽象线程类。Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。但是使用Parallel.For()方法,可以并行运行。

对于Parallel.For、Parallel.Foreach的使用应该要特别小心,它们的优势是处理列表很长,且对列表内的元素进行很复杂的业务逻辑,且不会使用共享资源,只针对自身的业务逻辑处理,方才能提升效率。

如果逻辑过于简单的话,创建线程的花费将大于业务执行的花费,此时不建议使用Parallel。

Parallel.For和Parallel.ForEach都会在执行完所有循环后再执行后面的代码。

下面给出了一个例子,用来体现Parallel.For和普通For的区别:

  • static void Main(string[] args)
  • {
  • Console.WriteLine("Parallel.For");
  • T1();
  • Console.WriteLine("普通For");
  • T2();
  • Console.ReadLine();
  • }
  • static void T1() {
  • Stopwatch stopwatch = new Stopwatch();
  • stopwatch.Start();
  • Parallel.For(0, 50, i =>
  • {
  • Stopwatch sw = new Stopwatch();
  • sw.Start();
  • using (WebClient wc = new WebClient())
  • {
  • var aa = wc.DownloadString("http://www.leavescn.com/Articles/Content/" + i + "?rnd=" + Guid.NewGuid());
  • sw.Stop();
  • Console.Write(string.Format("[{0}-耗时{1}]", i, sw.ElapsedMilliseconds));
  • }
  • });
  • stopwatch.Stop();
  • Console.WriteLine("\nEnd-执行时间:" + stopwatch.ElapsedMilliseconds);
  • }
  • static void T2()
  • {
  • Stopwatch stopwatch = new Stopwatch();
  • stopwatch.Start();
  • for(int i=0;i<50; i++) {
  • Stopwatch sw = new Stopwatch();
  • sw.Start();
  • using (WebClient wc = new WebClient())
  • {
  • var aa = wc.DownloadString("http://www.leavescn.com/Articles/Content/" + i + "?rnd=" + Guid.NewGuid());
  • sw.Stop();
  • Console.Write(string.Format("[{0}-耗时{1}]", i, sw.ElapsedMilliseconds));
  • }
  • };
  • stopwatch.Stop();
  • Console.WriteLine("\nEnd-执行时间:" + stopwatch.ElapsedMilliseconds);
  • }

执行结果如下:

可以看到,Parallel.For和普通For都是在执行完循环体内的代码再执行后面的代码。

在执行50次下载任务时,使用Parallel.For的话,执行时间少了1s。

e27c004ce5634ff0b5c8f64415c42f14.png
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门