字典查找、linq、foreach、yield等几种查找性能对比
先上代码,以1千万记录的内存查找测试:
List<Student> stuList = new List<Student>();
Dictionary<int, Student> dictStu = new Dictionary<int, Student>();
Student student = null;
for (int i = ; i < ; i++)
{
student = new Student(i);
stuList.Add(student);
dictStu.Add(i, student);
}
Stopwatch sw = new Stopwatch();
sw.Start();
student = dictStu[];
sw.Stop();
Console.WriteLine(student.ToString());
Console.WriteLine("dict={0}", sw.ElapsedMilliseconds); sw.Reset();
sw.Start(); var yieldResult = StudentResult(stuList);
foreach (Student stu in yieldResult)
{
Console.WriteLine(stu.ToString());
}
// Student s = yieldResult.First<Student>();
//Console.WriteLine(s.ToString());
sw.Stop(); Console.WriteLine("yieldResult={0}", sw.ElapsedMilliseconds); sw.Reset();
sw.Start(); foreach (Student stu in stuList)
{
if (stu.Age == )
{
student = stu;
break;
}
} sw.Stop(); Console.WriteLine("foreach={0}", sw.ElapsedMilliseconds); sw.Reset();
sw.Start(); var result = from stu in stuList
where stu.Age ==
select stu; foreach (Student stu in result)
{
Console.WriteLine(stu.ToString());
}
sw.Stop(); Console.WriteLine("linq={0}", sw.ElapsedMilliseconds);
static IEnumerable<Student> StudentResult(List<Student> stuList)
{
foreach (Student stu in stuList)
{
if (stu.Age == )
{
yield return stu;
} }
}
yield 查找方式的方法定义
执行结果

结论:
字典查找为哈希查找,性能最优,其次是foreach遍历,后依次为yield,linq
//var result = from stu in stuList
// //where stu.Age > 10 && stu.Age < 20
// select stu;
var result = stuList
.Where(r => r.Age > 10 && r.Age < 20)
.Select(r => r);
字典查找、linq、foreach、yield等几种查找性能对比的更多相关文章
- [笔记]Go语言写文件几种方式性能对比
Go语言中写文件有多种方式,这里进行如下几种方式的速度对比: 打开文件,写入内容,关闭文件.如此重复多次 打开文件,写入内容,defer 关闭文件.如此重复多次 打开文件,重复多次写入内容,defer ...
- Elasticsearch的几种架构(ELK,EL,EF)性能对比测试报告
Elasticsearch的几种架构性能对比测试报告 1.前言 选定了Elasticsearch作为存储的数据库,但是还需要对Elasticsearch的基础架构做一定测试,所以,将研究测试报告输出如 ...
- EF架构~linq模拟left join的两种写法,性能差之千里!
回到目录 对于SQL左外连接我想没什么可说的,left join将左表数据都获出来,右表数据如果在左表中不存在,结果为NULL,而对于LINQ来说,要实现left join的效果,也是可以的,在进行j ...
- 【摩天大楼平地起】基础篇 09 简述N种查找算法
引言 在开始之前首先可以先思考一下假如没有查找算法会是什么情况?所有数据结构都需要全部遍历一遍,每次都一遍又一遍的查,从本质而言查找算法就是为了提高效率. 经过前人一代又一代的努力,目前的查找算法大致 ...
- linux下五种查找命令
我们经常需要在系统中查找一个文件或者命令,那么在Linux系统中如何快速定位和精确查找它呢?下面总结了五个基础命令·分别是which.whereis.type.locate.find. 一 whi ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)
主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
最新最准确内容建议直接访问原文:ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性 ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转载)
原文地址: http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 原文地址: http://www.trinea.cn ...
- 【转】ArrayList和LinkedList的几种循环遍历方式及性能对比分析
原文网址:http://www.trinea.cn/android/arraylist-linkedlist-loop-performance/ 主要介绍ArrayList和LinkedList这两种 ...
随机推荐
- 关于IE10出现LinkButton点击无效的解决方案
关于IE10出现LinkButton点击无效的情况: 一般高配置的系统如Win7旗舰版SP1系统不会出现这种情况,针对家庭普通版和专业版的用户通过测试都有这种情况,对于开发人员要解决不同系统和IE的兼 ...
- asp.net中Cookie的用法【转】
比如建立一个名为aspcn,值为灌水小鱼的cookie HttpCookie cookie = new HttpCookie["aspcn"];cookie.Value = &qu ...
- Collection+JSON 文档
Collection+JSON 文档 对于这个设计,我们不再以可能的状态和转移为起点,相反,我们将从一个集合状态响应中可能元素的顶层布局开始.从这一点入手,其他细节可以随着设计向超媒体类型最底层属性的 ...
- struts2介绍
struts2简介 Struts2框架发展 Struts于2000年5月由Craig McClanahan发起,并于 2001年7月发布了1.0版本,Struts一出现便大受欢迎,更成为了以后几年内w ...
- placeholder兼容方法(兼容IE8以上浏览器)
//placeholder兼容方法(兼容IE8以上浏览器) var JPlaceHolder = { //检测 _check: function () { return 'placeholder' i ...
- [你必须知道的.NET]第一回:恩怨情仇:is和as
本文将介绍以下内 容: • 类型转换 • is/as操作符小议 1. 引言 类型安全是.NET设计之初重点考虑 的内容之一,对于程序设计者来说,完全把握系统数据的类型安全,经常是力不从心的问题.现在, ...
- R提高篇(一): 输入输出
目录: 文本输出 图形输出 数据输入 数据框输出 文本导入 Excel导入 文本输出 语法: sink(file = NULL, append = FALSE, type = c("outp ...
- bzoj4705: 棋盘游戏
Description 有一个N*M的棋盘,初始每个格子都是白色的. 行操作是指选定某一行,将这行所有格子的颜色取反(黑白互换). 列操作是指选定某一列,将这列所有格子的颜色取反. XX进行了R次行操 ...
- leptus和cowboy之间某些库的转换
在github上问作者,如何使用cookie,作者回复是,leptus是基于restful的框架,对于cookie和session的支持,建议转换为cowboy用,以下是转换方式 leptus_req ...
- C#对数组去重
#region ArrayList的示例应用 /// 方法名:DelArraySame /// 功能: 删除数组中重复的元素 /// </summary> /// <param na ...