.net LINQ and PLINQ
本文 学习自 微软官网文档 2016/12
LINQ 背景
以前写与DB 相关的代码, 程序员须要懂开发语言(C#, VB)和查询语言跟数据库交互。 LINQ 的出现使应用程序形成基于集合的查询。你可以编写针对各种数据源的(实现IEnumerable 接口的数据源)查询 。LINQ适用于内存的数据结构,XML文档,SQL数据库和DataSet对象。
查询是一种从数据源检索数据的表达式。查询通常用专门的查询语言来表示。随着时间的推移,人们已经为各种数据源开发了不同的语言;例如,用于关系数据库的 SQL 和用于 XML 的 XQuery。因此,开发人员不得不针对他们必须支持的每种数据源或数据格式而学习新的查询语言。LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况。在 LINQ 查询中,始终会用到对象。可以使用相同的基本编码模式来查询和转换 XML 文档、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及对其有 LINQ 提供程序可用的任何其他格式的数据。
LINQ 介绍
aaarticlea/png;base64,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" alt="" />
所有 LINQ 查询操作都由以下三个不同的操作组成:
获取数据源。
创建查询。
执行查询
下图显示了完整的查询操作。在 LINQ 中,查询的执行与查询本身截然不同;换句话说,如果只是创建查询变量,则不会检索任何数据。
class IntroToLINQ
{
static void Main()
{
// The Three Parts of a LINQ Query:
// 1. Data source.
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; // 2. Query creation.
// numQuery is an IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num; // 3. Query execution.
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
}
}
aaarticlea/png;base64,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" alt="" />
若要强制立即执行任意查询并缓存其结果,可以调用 ToList<TSource> 或 ToArray<TSource> 方法。
C# 3.0 特性
不必在声明并初始化变量时显式指定类型,您可以使用 var 修饰符来指示编译器推断并分配类型,如下所示:
通过对象和集合初始值设定项,初始化对象时无需为对象显式调用构造函数。初始值设定项通常用在将源数据投影到新数据类型的查询表达式中。假定一个类名为 Customer,具有公共 Name 和 Phone 属性,可以按下列代码中所示使用对象初始值设定项:
Customer cust = new Customer {Name = "Mike" ; Phone ={ "555-1212 "};
匿名类型由编译器构建,且类型名称只可用于编译器。匿名类型提供了一种在查询结果中临时分组一组属性的方便方法,无需定义单独的命名类型。使用新的表达式和对象初始值设定项初始化匿名类型,如下所示:
select new {name = cust.Name, phone = cust.Phone};
通过自动实现的属性,可以更简明地声明属性。当您如下面的示例中所示声明属性时,编译器将创建一个私有的匿名支持字段,该字段只能通过属性 getter 和 setter 进行访问。
public string Name {get; set;}
PLINQ 介绍
并行 LINQ (PLINQ) 是 LINQ 模式的并行实现。 PLINQ 查询在许多方面类似于非并行 LINQ to Objects 查询。 与顺序 LINQ 查询一样,PLINQ 查询对任何内存中 IEnumerable 或 IEnumerable<T> 数据源进行操作,并推迟执行,这意味着在枚举查询之前不会开始执行这些操作。 主要区别是 PLINQ 尝试充分利用系统中的所有处理器。 它利用所有处理器的方法是,将数据源分成片段,然后在多个处理器上对单独工作线程上的每个片段并行执行查询。 在许多情况下,并行执行意味着查询运行速度显著提高。
通过并行执行,PLINQ 通常只需向数据源添加 AsParallel 查询操作,即可在某些查询类型的旧版代码上获得显著的性能改进。 但是,并行可能引入其自己的复杂性,因此并非所有查询操作在 PLINQ 中都运行得更快。 事实上,并行降低了某些查询的速度。 因此,您应了解诸如排序等问题如何影响并行查询。 有关详细信息,请参阅 Understanding Speedup in PLINQ。
PLINQ 的主要用途是通过在多核计算机上以并行方式执行查询委托来加快 LINQ to Objects 查询的执行速度。
.net LINQ and PLINQ的更多相关文章
- 四、并行编程 - 并行LINQ(PLINQ) 的使用。AsParallel
用于对内存中的数据做并行运算,也就是说其只支持 LINQ to Object 的并行运算 一.AsParallel(并行化) 就是在集合后加个AsParallel(). 例如: , ); == ); ...
- PLINQ 并行操作Linq
C#并行编程-PLINQ:声明式数据并行 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-P ...
- .NET面试题系列[15] - LINQ:性能
.NET面试题系列目录 当你使用LINQ to SQL时,请使用工具(比如LINQPad)查看系统生成的SQL语句,这会帮你发现问题可能发生在何处. 提升性能的小技巧 避免遍历整个序列 当我们仅需要一 ...
- C#并行编程-PLINQ:声明式数据并行
目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-PLINQ:声明式数据并行 背景 通过LINQ可 ...
- C#并行编程-PLINQ:声明式数据并行-转载
C#并行编程-PLINQ:声明式数据并行 目录 C#并行编程-相关概念 C#并行编程-Parallel C#并行编程-Task C#并行编程-并发集合 C#并行编程-线程同步原语 C#并行编程-P ...
- C#基础提升系列——C# LINQ
C# LINQ LINQ(Language Integrated Query,语言集成查询).在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源. 命名空间System.Linq下的类En ...
- C#与C++的发展历程第二 - C#4.0再接再厉
系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 开始本系列的第二篇,这篇文章中将介绍C#4.0中一些变化,如C++有类似功 ...
- .NET并行编程实践(一:.NET并行计算基本介绍、并行循环使用模式)
阅读目录: 1.开篇介绍 2.NET并行计算基本介绍 3.并行循环使用模式 3.1并行For循环 3.2并行ForEach循环 3.3并行LINQ(PLINQ) 1]开篇介绍 最近这几天在捣鼓并行计算 ...
- 精通C#(第6版)
<精通C#(第6版)> 基本信息 原书名:Pro C# 5.0 and the .NET 4.5 framework,sixth edition 作者: (美)Andrew Troelse ...
随机推荐
- selenium 自动化测试面试题及答案
写在开始: 这些问题和答案,都是自己在网上找的,整理的,有任何问题,概不负责.主要感谢博主Ray,http://www.cnblogs.com/tsbc/p/4922368.html 1.seleni ...
- RocketMQ入门(1)
转自:http://www.changeself.net/archives/rocketmq入门(1).html RocketMQ入门(1) RocketMQ是一款分布式.队列模型的消息中间件,具有以 ...
- 【WIN32进阶之路】:内存映射文件
第一章:源起 遇到一个问题,如果一个客户数据文件有2g大,客户要通过界面查询文件中的数据并用列表控件显示数据,要怎么处理这个文件才能让应用程序不会长时间无响应,客户感觉不到程序的卡顿? 第二章:解决 ...
- 软件测试之WEB测试经典总结
在Web工程过程中,基于Web系统的测试.确认和验收是一项重要而富有挑战性的工作.基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览 ...
- 利用sqlmap和burpsuite绕过csrf token进行SQL注入 (转)
问题:post方式的注入验证时遇到了csrf token的阻止,原因是csrf是一次性的,失效导致无法测试. 解决方案:Sqlmap配合burpsuite,以下为详细过程,参照国外牛人的blog(不过 ...
- POJ 2778 DNA Sequence (AC自己主动机 + dp)
DNA Sequence 题意:DNA的序列由ACTG四个字母组成,如今给定m个不可行的序列.问随机构成的长度为n的序列中.有多少种序列是可行的(仅仅要包括一个不可行序列便不可行).个数非常大.对10 ...
- 7 种流行 PHP IDE 的比较
编写关于 PHP 的系列文章让我更加深刻地了解了 PHP 开发人员的世界.我和许多 PHP 程序员交谈过,最令我惊奇的是只有很少的人使用 IDE.大多数程序员使用文本编辑器,比如 Microsoft® ...
- ios开发——实用技术篇Swift&Swift调用C、C++、Object
Swift调用C.C++.Object 1.Swift调用C语言a,首先在项目中添加 CFile 文件命名为CHello,同时产生桥梁文件. b,创建之后的项目结构 b,在CHello.h文件中编写接 ...
- curl常用的5个例子(转)
我用php ,curl主要是抓取数据,当然我们可以用其他的方法来抓取,比如fsockopen,file_get_contents等.但是只能抓那些能直接访问的页面,如果要抓取有页面访问控制的页面,或者 ...
- 从问题看本质: 研究TCP close_wait的内幕
Socket应用服务器TomcatOSUbuntu /* * @author: ahuaxuan * @date: 2010-4-30 */ 最近遇到的一个关于socket.close的问题,在某个 ...