当前位置:首页 > IT科技类资讯

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

本文转载自微信公众号「后端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,提高效率。

var objctLock = new object();            Parallel.ForEach(columnsList, () => new List<TencentSportDateMatches>(), (x, l, r) =>            {                 GetMatchListByColumns(startDate, endDate, x.ColumnsId, x.Name, r);                return r;            }, x =>            {                 lock (objctLock)                {                     x.ForEach(z =>                    {                         var info = result.FirstOrDefault(k => k.Date == z.Date);                        if (info == null)                        {                             info = new TencentSportDateMatches                            {                                 Date = z.Date,                                Matches = new List<TencentSportMatchInfo>()                            };                            result.Add(info);                        }                        info.Matches.AddRange(z.Matches);                    });                }            }); 亿华云计算

分享到:

滇ICP备2023006006号-16