Parallel.ForEach() 并行循环[通俗易懂]

Parallel.ForEach() 并行循环[通俗易懂]现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。微软的并行运算平台(Microsoft’sParallelComputingPlatform(PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。Parallel.ForEach()和Parallel.For()就是微软并发类的成员。今天做了一个简…

大家好,又见面了,我是你们的朋友全栈君。

现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。
微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。
Parallel.ForEach()和Parallel.For()就是微软并发类的成员。
今天做了一个简单的测试,我的电脑是双核的,效果还是比较明显的。
一般的for和foreach循环用时都在10秒钟;并发for循环在0.5秒,并发foreach在0.1秒钟。
但是并发循环不能滥用,在简单的少次数循环下,并发循环可能会体现不出其优势。
下面是简单的测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace parallelForeach
{

    class Program
    {

        static void Main(string[] args)
        {

            DateTime startTime;
            TimeSpan resultTime;
            List<entityA> source = new List<entityA>();
            for (int i = 0; i < 100; i++)
            {

                source.Add(new entityA
                {

                    name = “悟空” + i,
                    sex = i % 2 == 0 ? “男” : “女”,
                    age = i
                });
            }
            startTime = System.DateTime.Now;
            loop1(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“一般for循环耗时:” + resultTime);
            startTime = System.DateTime.Now;
            loop2(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“一般foreach循环耗时:” + resultTime);
            startTime = System.DateTime.Now;
            loop3(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“并行for循环耗时:” + resultTime.Milliseconds);
            startTime = System.DateTime.Now;
            loop4(source);
            resultTime = System.DateTime.Now – startTime;
            Console.WriteLine(“并行foreach循环耗时:” + resultTime.Milliseconds);
            Console.ReadLine();
        }

//普通的for循环
        static void loop1(List<entityA> source)
        {

            int count = source.Count();
            for (int i = 0; i < count; i++)
            {

                System.Threading.Thread.Sleep(100);
            }
        }

//普通的foreach循环
        static void loop2(List<entityA> source)
        {

            foreach (entityA item in source)
            {

                System.Threading.Thread.Sleep(100);
            }
        }

//并行的for循环
        static void loop3(List<entityA> source)
        {

            int count = source.Count();
            Parallel.For(0, count, item =>
            {

                System.Threading.Thread.Sleep(100);
            });
        }

//并行的foreach循环
        static void loop4(List<entityA> source)
        {

            Parallel.ForEach(source, item =>
            {

                System.Threading.Thread.Sleep(100);
            });
        }
    }

//简单的实体
    class entityA
    {

        public string name { set; get; }
        public string sex { set; get; }
        public int age { set; get; }
    }
}
————————————————
版权声明:本文为CSDN博主「keyrainie」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/keyrainie/article/details/7679971

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161785.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月19日 上午8:00
下一篇 2022年7月19日 上午8:16


相关推荐

  • C语言练习7—一维数组删除指定位置元素

    C语言练习7—一维数组删除指定位置元素题目在一维数组删除指定位置元素,现定义第一个元素位置为1,一维数组元素个数不确定,需要动态输入,并返回删除元素后的数组以及被删除的元素。例如输入数组个数为n=4;将要删除的数组元素位置是2;在这里插入代码片…

    2022年8月11日
    5
  • 读懂蛋白质PDB文件

    读懂蛋白质PDB文件对于从事生物行业的朋友们来说,PDB文件和蛋白质结构是很多人绕不过去的问题。然而对于天天跑电泳过柱子的生物狗来说,PDB文件打开后与天书无异。这里,我转载一篇网上看到的关于PDB文件内记号说明的文章,希望对大家有用!教你读懂蛋白质的PDB文件&n…

    2022年6月2日
    159
  • bat – 批量替换文件名字符

    bat – 批量替换文件名字符批量替换文件名字符 echooff amp setlocalenab 这是提示输入文件位置 直接打开文件夹复制路径 黏贴就行 set ppath pleasepaste inputyourExc set pstr Pleaseentert set

    2026年3月17日
    2
  • VB程序设计教程(第四版)龚沛曾 实验8-2「建议收藏」

    VB程序设计教程(第四版)龚沛曾 实验8-2「建议收藏」VB程序设计教程(第四版)龚沛曾实验8-2将斐波那契数列的前10项写入文件Fb.dat,然后从该文件将数据读取出来并计算合计和平均数,最后送入列表框。要求:文件数据格式如2.8.2所示,列表框中项目格式如图2.8.3所示。…

    2022年10月7日
    4
  • Facebook的c++开源库folly介绍

    Facebook的c++开源库folly介绍folly 在 Facebook 内部广泛使用的一个 c 库 是开源的 github 地址 https github com facebook folly 之前的 boost 库给我们带来了很多方便 比如智能指针之类的 从 c 11 开始 对 std 标准库有了很大的补充 大大方便了 c 程序员 folly 是 Facebookopen 的缩写 其中用到了大量的 C 11 新标准 代

    2026年3月19日
    2
  • Vue2.4中$attrs和$listeners的使用-学习笔记

    Vue2.4中$attrs和$listeners的使用-学习笔记首先我们来看下面的一张图,图中表示一个多级组件嵌套的情形。现在我们来讨论一种情况,A组件与C组件怎么通信,我们有多少种解决方案?我们使用VueX来进行数据管理,但是如果项目中多个组件共享状态比较少,项目比较小,并且全局状态比较少,那使用VueX来实现该功能,并没有发挥出VueX的威力。 使用B来做中转站,当A组件需要把信息传给C组件时,B接受A组件的信息,然后利用属性传给C组件,这是…

    2022年10月18日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号