改善C#程序的157个建议——建议84学习笔记:使用PLINQ

简介: 改善C#程序的157个建议——建议84学习笔记:使用PLINQ

微软专门为Linq拓展了一个类ParallelEnumerable(该类型也在命名空间System.Linq中),它所提供的扩展方法让Linq支持并行计算,这就是所谓PLinq。


传统的Linq计算是单线程的,PLinq则是并发的、多线程的,例如:


  class Program


   {


       static void Main(string[] args)


       {


           List<int> intList = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };


           var query = from p in intList select p;


           Console.WriteLine("以下是Linq输出:");


           foreach (int item in query)


           {


               Console.WriteLine(item.ToString());


           }


           Console.WriteLine("以下是PLinq并行输出:");


           var queryParallel = from p in intList.AsParallel() select p;


           foreach (int item in queryParallel)


           {


               Console.WriteLine(item.ToString());


           }


           Console.ReadKey();


       }


}


以下是Linq输出:


0


1


2


3


4


5


6


7


8


9


以下是PLinq并行输出:


0


1


9


2


4


6


8


3


5


7


并行输出的另一种方式:


  queryParallel.ForAll((item) => {


               Console.WriteLine(item.ToString());


           });


使用ForAll会忽略掉查询的AsOrdered请求。例:


           Console.WriteLine("以下是PLinq并行顺序输出:");


           var queryParallel = from p in intList.AsParallel().AsOrdered() select p;


           foreach (int item in queryParallel)


           {


               Console.WriteLine(item.ToString());


           }


           Console.WriteLine("以下是PLinq并行ForAll输出:");


           queryParallel.ForAll((item) => {


               Console.WriteLine(item.ToString());


           });


以下是PLinq并行顺序输出:


0


1


2


3


4


5


6


7


8


9


以下是PLinq并行ForAll输出:


9


2


3


8


4


5


6


7


0


1


在并行查询后在进行排序,会牺牲掉一定的性能。一些扩展方法默认对元素进行排序,这些方法包括OrderBy、OrderByDescending、ThenBy和ThenByDescending,还有一些查询方法比如Take。



目录
相关文章
|
3月前
|
C# 开发者
C# 9.0中的模块初始化器:程序启动的新控制点
【1月更文挑战第14天】本文介绍了C# 9.0中引入的新特性——模块初始化器(Module initializers)。模块初始化器允许开发者在程序集加载时执行特定代码,为类型初始化提供了更细粒度的控制。文章详细阐述了模块初始化器的语法、用途以及与传统类型初始化器的区别,并通过示例代码展示了如何在实际项目中应用这一新特性。
|
3月前
|
编译器 C# 开发者
C# 9.0中的顶级语句:简化程序入口的新特性
【1月更文挑战第13天】本文介绍了C# 9.0中引入的顶级语句(Top-level statements)特性,该特性允许开发者在不使用传统的类和方法结构的情况下编写简洁的程序入口代码。文章详细阐述了顶级语句的语法、使用场景以及与传统程序结构的区别,并通过示例代码展示了其在实际应用中的便捷性。
|
6月前
|
开发框架 .NET C#
利用WinDbg分析C#程序产生的转储文件
利用WinDbg分析C#程序产生的转储文件
|
6月前
|
C# C++
VS调试C#程序产生的dump
VS调试C#程序产生的dump
|
6月前
|
C#
C#程序Debug文件夹可以运行,无法调试
C#程序Debug文件夹可以运行,无法调试
|
27天前
|
Java C# 开发工具
第一个C#程序
第一个C#程序
12 0
|
1月前
|
数据采集 存储 C#
抓取Instagram数据:Fizzler库带您进入C#程序的世界
在当今数字化的世界中,数据是无价之宝。社交媒体平台如Instagram成为了用户分享照片、视频和故事的热门场所。作为开发人员,我们可以利用爬虫技术来抓取这些平台上的数据,进行分析、挖掘和应用。本文将介绍如何使用C#编写一个简单的Instagram爬虫程序,使用Fizzler库来解析HTML页面,同时利用代理IP技术提高采集效率。
抓取Instagram数据:Fizzler库带您进入C#程序的世界
|
5月前
|
开发框架 网络协议 前端开发
一个对C#程序混淆加密,小巧但够用的小工具
一个对C#程序混淆加密,小巧但够用的小工具
83 1
|
7月前
|
C#
C#开源的虚拟桌宠模拟器,可以内置到任何WPF应用程序 - VPet
C#开源的虚拟桌宠模拟器,可以内置到任何WPF应用程序 - VPet
|
3月前
|
C#
halcon联合c#、WPF学习笔记三(dispatcherTimer实时相机显示)
halcon联合c#、WPF学习笔记三(dispatcherTimer实时相机显示)
59 1
halcon联合c#、WPF学习笔记三(dispatcherTimer实时相机显示)