必威体育Betway必威体育官网
当前位置:首页 > IT技术

Parallel.ForEach() 并行循环

时间:2019-10-09 02:13:28来源:IT技术作者:seo实验室小编阅读:63次「手机版」
 

parallel.foreach

现在的电脑几乎都是多核的,但在软件中并还没有跟上这个节奏,大多数软件还是采用传统的方式,并没有很好的发挥多核的优势。

微软的并行运算平台(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; }

}

}

————————————————

相关阅读

最长的循环节 之 有趣的无限循环小数

  如题:1035 最长的循环节 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题正整数k的倒数1/k,写为10进制的小

【LeetCode】—— 设计循环队列LeetCode622题

设计循环队列 题目描述 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。

分治法之循环赛日程表的理解和解题思路

一、问题:设有n=2^k个运动员,要进行网球循环赛。现在要设计一个满足以下要求的比赛日程表(1)每个选手必须与其他n-1个选手各赛一场(2)每

java JSONArray数组如何循环遍历出来

前提 相关的jar包   https://download.csdn.net/download/qq_37591637/11162911 代码如下 package cn.com.tools; import

应用程序的并行配置不正确 sxstrace.exe

最近在用 VS写一个 小Demo的时候,在自己的电脑的上运行的好好的,但是拿到 另一台电脑(Wes8操作系统)就运行不起来,报: 应用程序的并行

分享到:

栏目导航

推荐阅读

热门阅读