foreach 与 Linq的 Select 效率问题
Resharper 是一个非常强大的C#编程辅助工具,有着非常强的提示功能,代码纠正,代码简化等等
在编码过程中注意到这么一件事,可能是大家经常会遇到的:
遍历某个集合,然后经过处理生成另外一个集合,例如遍历一个产品列表,生成一个SelectItem 的List,我一直这么写:
var list = new List<SelectListItem>(); foreach (var product in products)
{
list.Add(new SelectListItem(){ Text = product.Name, Value = product.Id});
}
这时,Resharper会提示我将它改成这样:
var list = products.Select(product => new SelectListItem() {Text = product.Name, Value = product.Id}).ToList();
是简洁了不少,我也开始喜欢这种风格
但在随后的一段代码中,处理上百万的数据,运行比较慢,就开始着手优化代码,发现直接Foreach比Select要快那么一点点,想想也能明白,select内部的实现逻辑,会转换为函数调用,效率肯定会比直接做循环要低。
有时候,简介的代码也许不能带来高的效率,得视情况而定,小数据量,可以Select保持代码简介,对与大量数据,还是直接做简单的循环,简单的数据结构,效率会更好。
foreach 与 Linq的 Select 效率问题的更多相关文章
- Linq的执行效率及优化
描述:项目中使用了linq,发现写的顺序不一样最后的结果也不一样,效率也不一样. Linq的执行效率对比 List<int> source = new List<int>(); ...
- PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)
* 使用foreach遍历数组时要注意的问题: * 1.foreach在遍历之前会自动重置指针使用其指向第一个元素,所以foreach可以多次遍历 * 2.foreach遍历完成之后,指针是没有指向数 ...
- Linq之select子句
在Linq中select子句用来指定查询结果的类型和表现形式.Linq查询要么以select子句结尾,要么以group子句结尾. List<UserBaseInfo> users = ne ...
- 经测试,foreach循环比linq的效率高
- Linq 之 Select 和 where 的用法
最近开始学习linq.自己也总结一下,方便以后查阅. Select 同 Sql 中的 select 类似,即输出我们要的东东,感觉在 linq 中更加强大. Linq 可以对集合如数组.泛型等操作,这 ...
- for循环和foreach循环遍历集合的效率比较
先上代码 package com.test; import java.util.ArrayList; import java.util.LinkedList; import java.util.Lis ...
- 关于LINQ中SELECT NEW 的问题
public static object SelectAnyInfo(){ DataAccessContext context = new DataAccessContext(); var ...
- LINQ之select方法选择多个字段
单个字段: var list1 = list.Select(field1 => field1.CouponID).ToList(); 多个字段: var list1 = list.Select( ...
- Linq中Select查询参数提取公共方法
class Program { static void Main(string[] args) { var listTest1 = new List<Test1> { "}, & ...
随机推荐
- 【SSH】——Hibernate实现简单的自动建表
[与ORM] Object Relational Mapping,对象关系映射,将对象和关系联系了起来.面向对象是从耦合.聚合.封装等的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论 ...
- [剑指Offer] 7.斐波那契数列
class Solution { public: int Fibonacci(int n) { ] = {}; res[] = ; res[] = ; ;i < n;i ++){ res[i] ...
- typescript 简版跳一跳
typescript 简版跳一跳 学习typescript,第一步应该是学习官方文档,理解最基础的语法.第二步开始用typescript实现一些js+css 或者canvas类型的游行.现在开始我们用 ...
- combobox下拉框
----------------------------------------------combobox下拉框----------------------------------------- f ...
- C++——拷贝构造函数说明
一. 什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: [c-sharp] view plaincopy 1 int a = 100; 2 int b = a; 而类对 ...
- 【NOIP模拟赛】超级树 DP
这个题我在考试的时候把所有的转移都想全了就是新加一个点时有I.不作为II.自己呆着III.连一个IV.连接两个子树中的两个V连接一个子树中的两个,然而V我并不会转移........ 这个题的正解体现了 ...
- 如何用PhotoShop制作网站的favicon.ico
所谓favicon,即Favorites Icon的缩写,顾名思义,便是其可以让浏览器的收藏夹中除显示相应的标题外,还以图标的方式区别不同的网站.当然,这不仅仅是Favicon的全部,根据浏览器的不同 ...
- C语言指针大杂烩
By francis_hao Oct 31,2016 指针数组和数组指针 指针数组本身是个数组,数组的内容是指针.形如char *pa[].由于[]优先级高于*,pa先于[]结合表示pa是一个数组,p ...
- Spring源码解析-AutowiredAnnotationBeanPostProcessor
1.实现了BeanPostProcessor接口,可先看这个接口 ApplicationContext可以在自动检测BeanPostProcessor bean,在它创建完后可以创建任何的bean. ...
- POJ1733:Parity Game(离散化+带权并查集)
Parity Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12853 Accepted: 4957 题目链接 ...