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> { "}, & ...
随机推荐
- yii视频地址哦
https://www.yiichina.com/video
- 如何在tracepoint上注册函数
register_trace_##name宏中 tracepoint_probe_register在这个函数中在同一个cp上可以挂多个处理函数, 查看函数:trace_block_rq_issue中定 ...
- perf 对两个map是否重叠的判断,以及函数map_groups__fixup_overlappings代码逻辑
该标题可以抽象出来的问题是:两个前开后闭的区间 rangeA 和 rangeB,如何判断这两个区间是否重叠.这个问题在内核中非常重要,虚拟地址空间的划分需要它,perf中map_group的构建也需要 ...
- BZOJ2437 NOI2011兔兔与蛋蛋(二分图匹配+博弈)
首先将棋盘黑白染色,不妨令空格处为黑色.那么移动奇数次后空格一定处于白色格子,偶数次后空格一定处于黑色格子.所以若有某个格子的棋子颜色与棋盘颜色不同,这个棋子就是没有用的.并且空格与某棋子交换后,棋子 ...
- 【POJ 3169 Layout】
Time Limit: 1000MSMemory Limit: 65536K Total Submissions: 12565Accepted: 6043 Description Like every ...
- 免费的dns服务器(更换dns服务器有时可以解决某些网站(如爱奇艺访问不了的问题))
首先百度提供的dns就是非常好用的dns,小编就把百度的dns作为首选180.76.76.76. 其次是阿里提供的dns223.5.5.5,响应速度非常的快,而且没有广告劫持. 再就是最通用的 ...
- bootstrap、angularJS、nodeJs、reactJs视频教程
bootstrap.angularJS.nodeJs.reactJs视频教程 发布时间:『 2017-06-25 19:50』 博客类别:资源下载 阅读(74) 评论(0) 智能社与达内哪个好?说 ...
- POJ3020:Antenna Placement(二分图匹配)
Antnna Placement Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11093 Accepted: 5459 ...
- Kafka配置文档
http://kafka.apache.org/08/configuration.html
- 移动端去掉a标签点击时出现的背景
之前做移动端的Portal时,手机上测试,点击a标签总是出现一个背景框 在CSS中添加 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);就可以了 a:act ...