ITPub博客

首页 > 数据库 > 数据库开发技术 > C# 多线程使用Parallel.ForEach并行循环,真的能提高效能?

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

原创 数据库开发技术 作者:后端Q 时间:2021-11-30 00:00:00 0 删除 编辑

概述

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);
                    });
                }
            });


原文作者:后端Q;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2023-01-22

  • 博文量
    1540
  • 访问量
    726187