C# 多线程使用Parallel.ForEach并行循环,真的能提高效能?

开发 后端
Parallel类是.NET 4中新增的抽象线程类。Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。但是使用Parallel.For()方法,可以并行运行。微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。

[[437438]]

本文转载自微信公众号「后端Q」,作者conan。转载本文请联系后端Q公众号。

 概述

Parallel类是.NET 4中新增的抽象线程类。Parallel.For()方法类似于C#的for循环语句,也是多次执行一个任务。但是使用Parallel.For()方法,可以并行运行。微软的并行运算平台(Microsoft’s Parallel Computing Platform (PCP))提供了这样一个工具,让软件开发人员可以有效的使用多核提供的性能。Parallel.ForEach()和Parallel.For()就是微软并发类的成员。

测试

今天做了一个简单的测试,同样方法一般的for和foreach循环用时都在10秒钟;并发for循环在0.5秒,并发foreach在0.1秒钟。但是并发循环不能滥用,在简单的少次数循环下,并发循环可能会体现不出其优势。

结论

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

示例

此示例循环去执行指定的任务,属于比较耗时,所以使用Parallel,提高效率。

  1. var objctLock = new object(); 
  2.            Parallel.ForEach(columnsList, () => new List<TencentSportDateMatches>(), (x, l, r) => 
  3.            { 
  4.                GetMatchListByColumns(startDate, endDate, x.ColumnsId, x.Name, r); 
  5.                return r; 
  6.            }, x => 
  7.            { 
  8.                lock (objctLock) 
  9.                { 
  10.                    x.ForEach(z => 
  11.                    { 
  12.                        var info = result.FirstOrDefault(k => k.Date == z.Date); 
  13.                        if (info == null
  14.                        { 
  15.                            info = new TencentSportDateMatches 
  16.                            { 
  17.                                Date = z.Date
  18.                                Matches = new List<TencentSportMatchInfo>() 
  19.                            }; 
  20.                            result.Add(info); 
  21.                        } 
  22.                        info.Matches.AddRange(z.Matches); 
  23.                    }); 
  24.                } 
  25.            }); 

 

 

责任编辑:武晓燕 来源: 后端Q
相关推荐

2010-03-19 13:17:26

Parallel

2017-11-17 06:04:04

终端安全漏洞恶意软件

2012-07-27 16:16:44

H3C SecBlad云安全H3C

2024-09-29 16:22:18

多线程TaskC#

2024-09-27 19:42:09

工具C#Task​

2021-09-09 07:16:00

C#多线程开发

2010-01-26 19:42:03

IT服务运维管理摩卡软件

2010-02-03 19:14:54

IT服务运维管理摩卡软件

2024-05-29 09:13:37

2009-02-16 16:49:53

DBA经验

2023-01-04 08:31:10

转转测试环境

2012-06-29 09:51:22

虚拟化

2011-05-06 09:07:19

惠普打印机

2016-10-19 14:40:29

Kilopass

2009-03-19 17:42:13

Nehalem服务器奔腾

2010-04-15 04:01:43

曙光GHPC1000

2012-07-02 10:14:56

2009-08-12 18:04:44

编写C#多线程

2009-08-28 17:18:55

foreach循环

2010-04-26 15:56:08

Unix服务器
点赞
收藏

51CTO技术栈公众号