架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 503|回复: 2

[资料] .NET/C# 性能优化之使用 PLINQ 并行查询

[复制链接]
发表于 2024-3-2 17:30:49 | 显示全部楼层 |阅读模式
什么是并行查询?

一个 PLINQ 查询的许多方面都类似于非并行的 LINQ to Objects 查询。 与顺序 LINQ 查询一样,PLINQ 查询对任何内存中 IEnumerable 或 IEnumerable<T> 数据源执行操作,并且推迟了执行,即在枚举查询前不会开始执行。 主要区别在于,PLINQ 会尝试充分利用系统上的所有处理器。 方法是将数据源分区成片段,然后在多个处理器上针对单独工作线程上的每个片段执行并行查询。 在许多情况下,并行执行意味着查询运行速度显著提高。

通过并行执行,通常只需向数据源添加 AsParallel 查询操作,PLINQ 即可显著提升性能(与某些类型查询的旧代码相比)。 但是,并行可能会引入其自身的复杂性,因此并非所有的查询操作的运行速度在 PLINQ 中都更快。 事实上,并行实际上会降低某些查询的速度。 因此,应了解排序等问题将如何对并行查询产生影响。 有关详细信息,请参阅了解 PLINQ 中的加速。

简单示例

集合中1万条数据,通过并行查询数据中的偶数,代码如下:

QQ截图20240302172630.jpg

PLINQ 使用的其它特性

1、使用 AsSequential,如果你不想在过程使用并行查询,可以用此特性还原成顺序查询。


2、使用AsOrdered ,由于PLINQ是并行运行,所以结果可能不是按照顺序来,这是可以添加AsOrdered方法来查询。


3、使用WithDegreeOfParallelism,此属性可以设置电脑并行的CUP数。


场景注意

在很多情况下,可以并行化查询,但是设置并行查询的开销可能会超出获得的性能收益。 如果查询不执行大量的计算,或者如果数据源较小,则 PLINQ 查询的速度可能比顺序 LINQ to Objects 查询的速度慢。 可以在 Visual Studio Team Server 中使用并行性能分析器比较各种查询的性能,查找处理瓶颈,以及确定查询是并行运行还是按顺序运行。

参考:https://learn.microsoft.com/zh-cn/dotnet/standard/parallel-programming/introduction-to-plinq





上一篇:【实战】OpenWrt 安装 luci-app 插件教程
下一篇:SQL Server 使用扩展事件跟踪 Deadlock 死锁问题
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2024-3-20 22:29:27 | 显示全部楼层
HuairongChen 发表于 2024-3-20 16:05
我使用了Parallel 开启同步并行  性能提升一倍 ,但是同样也需要注意并行处理数据的问题 ...

你把 item+=1; 换成 thread.sleep(100) 对比更明显
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2024-3-20 16:05:24 | 显示全部楼层
991333b28c5ddc6050f7bb41dc6e343.png

我使用了Parallel 开启同步并行  性能提升一倍 ,但是同样也需要注意并行处理数据的问题
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-5-23 15:45

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表