C# Lambda || Linq 效率问题
255条数据
static void Main()
{
List<IPEndPoint> list = new List<IPEndPoint>();
for (int i =0;i<=255;i++)
{
int j = 34 + i / 255;
string ip = "188.10." + j + "." + i % 255;
int port = 26666;
IPAddress addr = IPAddress.Parse(ip);
IPEndPoint host = new IPEndPoint(addr, port);
list.Add(host);
}
System.Diagnostics.Stopwatch stop = new System.Diagnostics.Stopwatch();
stop.Start();
List<IPAddress> ips = new List<IPAddress>();
foreach (var item in list)
{
if (item.Address.ToString()=="188.10.34.140")
{
ips.Add(item.Address);
}
}
stop.Stop();
double mili = stop.Elapsed.TotalMilliseconds;
Console.WriteLine("loop:\t\t"+mili);
Console.WriteLine("loopCount:\t"+ips.Count);
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
List<IPAddress> lists = list.Where(e => e.Address.ToString() == "188.10.34.140").Select(e => e.Address).ToList<IPAddress>();
watch.Stop();
double milis = watch.Elapsed.TotalMilliseconds;
Console.WriteLine("lambda:\t\t"+milis);
Console.WriteLine("lambdaCount:\t"+lists.Count);
}
结果
loop: 0.0951
loopCount: 1
lambda: 0.5711
lambdaCount: 1
2550条
···
static void Main()
{
List list = new List();
for (int i =0;i<=2550;i++)
{
int j = 34 + i / 255;
string ip = "188.10." + j + "." + i % 255;
int port = 26666;
IPAddress addr = IPAddress.Parse(ip);
IPEndPoint host = new IPEndPoint(addr, port);
list.Add(host);
}
System.Diagnostics.Stopwatch stop = new System.Diagnostics.Stopwatch();
stop.Start();
List<IPAddress> ips = new List<IPAddress>();
foreach (var item in list)
{
if (item.Address.ToString()=="188.10.34.140")
{
ips.Add(item.Address);
}
}
stop.Stop();
double mili = stop.Elapsed.TotalMilliseconds;
Console.WriteLine("loop:\t\t"+mili);
Console.WriteLine("loopCount:\t"+ips.Count);
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
List<IPAddress> lists = list.Where(e => e.Address.ToString() == "188.10.34.140").Select(e => e.Address).ToList<IPAddress>();
watch.Stop();
double milis = watch.Elapsed.TotalMilliseconds;
Console.WriteLine("lambda:\t\t"+milis);
Console.WriteLine("lambdaCount:\t"+lists.Count);
}
···
结果
loop: 0.4618
loopCount: 1
lambda: 0.6283
lambdaCount: 1
25500条
static void Main()
{
List<IPEndPoint> list = new List<IPEndPoint>();
for (int i =0;i<=25500;i++)
{
int j = 34 + i / 255;
string ip = "188.10." + j + "." + i % 255;
int port = 26666;
IPAddress addr = IPAddress.Parse(ip);
IPEndPoint host = new IPEndPoint(addr, port);
list.Add(host);
}
System.Diagnostics.Stopwatch stop = new System.Diagnostics.Stopwatch();
stop.Start();
List<IPAddress> ips = new List<IPAddress>();
foreach (var item in list)
{
if (item.Address.ToString()=="188.10.34.140")
{
ips.Add(item.Address);
}
}
stop.Stop();
double mili = stop.Elapsed.TotalMilliseconds;
Console.WriteLine("loop:\t\t"+mili);
Console.WriteLine("loopCount:\t"+ips.Count);
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
List<IPAddress> lists = list.Where(e => e.Address.ToString() == "188.10.34.140").Select(e => e.Address).ToList<IPAddress>();
watch.Stop();
double milis = watch.Elapsed.TotalMilliseconds;
Console.WriteLine("lambda:\t\t"+milis);
Console.WriteLine("lambdaCount:\t"+lists.Count);
}
结果
loop: 5.0348
loopCount: 1
lambda: 1.5531
lambdaCount: 1
猜想
Linq好像转化为stream再做处理,所以数据量少的时候比较占用时间,但是好省代码量。我也不懂Linq,只会用
C# Lambda || Linq 效率问题的更多相关文章
- 分享一个递归无限级拼接Json的方法---ExtJs的TreePanel和TreeGrid均适用(Ef,Lambda,Linq,IQueryable,List)
话不多说,先上实体类,如果你不是codefirst,就把它当成数据表结构. 下面是底层BaseDal获取数据的方法 (如果你没有Base类,直接写在你的DAL层和BLL层) 下面是BaseServi ...
- [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下微软的MVC4+EF5(EntityFramework5)框架的强大,能够高效的开发出网站应用开发系统,下面就看一下如何用MVC4+EF ...
- Lambda表达式效率问题
原文 http://www.importnew.com/17262.html 有许许多多关于 Java 8 中流效率的讨论,但根据 Alex Zhitnitsky 的测试结果显示:坚持使用传统的 Ja ...
- [转][MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
本文转自:https://blog.csdn.net/dingxiaowei2013/article/details/29405687 继续上一节初始ASP.NET MVC4,继续深入学习,感受了一下 ...
- 几种查询方法(lambda Linq Enumerable静态类方式)
1.需要一个数据源类: using System; using System.Collections.Generic; namespace Linq { public class Student { ...
- C# Lambda && Linq
Lambda表达式在C#3.0加入,它是一个匿名函数,可用于创建委托或者表达式树类型,运算符为=>,读作"goes to",=>左侧是变量,右侧是表达式,变量类型可以自 ...
- 有关 Lambda && linq练习 有待整理
1. 查询Student表中的所有记录的Sname.Ssex和Class列.(select sname,ssex,class from student) Students.Select(s=> ...
- for/foreach/linq效率测试
; Random r = new Random(); List<byte> list = new List<byte>(); Console.WriteLine("开 ...
- ASP.NET MVC4+EF5(Lambda/Linq)读取数据
希望大家记住,这里讲的所有的知识点,不仅仅是了解了就可以了,还要会灵活用,一定要多思考,撑握其中的编程思想. 本文讲的是委托和事件,这两个词可能你早就耳熟能详,但你是否真正撑握了呢? 本系列讲的C#高 ...
- Lambda&Linq
var list = new List<Model> { , UserName = ", Email = "zhang3@yoy.com"}, , UserN ...
随机推荐
- VB 的一些歧义(不断更新)
foo . bar 它可能是 foo.bar() 也可能是 foo(withObj.bar). f (a) , b 它可能是 call f(a)._DEFAULT(a)(Missing, b) 也可能 ...
- 解锁 Git Log 更多实用技巧
目前,在软件开发的协作中,Git 无疑是版本控制的王者. 而其中的 git log 命令,犹如一把强大的历史探寻之剑,能够帮助我们深入洞察项目的演进历程. 本篇将为大家整理解读几个实用的 git Lo ...
- 若依多模块版本,Linux下用Tomcat部署
若依多模块版本 简介 下载地址 https://gitee.com/y_project/RuoYi 下载项目,打war包 下载项目 到 Gitee 下载项目 用 idea 打开,会自动下载 pom 依 ...
- Qt/C++开发经验小技巧281-285
悬停窗体QDockWidget默认在标题栏右键会弹出悬停模块的显示隐藏菜单,如果需要去掉,会发现设置Qt::NoContextMenu或者事件过滤器拦截都是无效的,必须设置 dockWidget-&g ...
- Springboot整合WebSocket作为服务端遇到的坑
最近遇到一个需求,对接某公有云上的坐席系统,需要接收人工坐席和客户对话的语音流,然后调用ASR(Automatic Speech Recognition,自动语音识别)引擎,对语音流实时转写,最后将实 ...
- UML之包的导入与访问
包是UML中管理元素的有效手段,UML中的所有元素均隶属于某一个包,即使你没有指定元素所属的包,这些元素也会被置于一个默认包中,包的本质是命名空间.当我们在一个包中需要访问另一个包中的元素时,可以使用 ...
- 一套分布式IM即时通讯系统的技术选型和架构设计
本文由冰河分享,作者博客 binghe.gitcode.host,原题"这套分布式IM即时通讯系统如何写到简历上?我给你整理好了!",本文有修订和改动. 1.引言 分布式IM即时通 ...
- 移动端开源 IM 框架 MobileIMSDK v6.0 发布!
一.更新内容简介 本次为主要版本更新(本次更新内容见文末"MobileIMSDK v6.0更新内容 "一节),强势升级,将同时支持TCP.UDP.WebSocket三种协议,精心封 ...
- 在 .NET Core中如何使用 Redis 创建分布式锁
在 .NET Core WebApi 中使用 Redis 创建分布式锁可以通过 StackExchange.Redis 库来实现.分布式锁用于确保在分布式系统中,同一时间只有一个进程可以执行某段代码. ...
- python SQLAlchemy ORM——从零开始学习03 如何针对数据库信息进行排序
03 如何进行排序 3-1准备工作: 因为要排序,所以需要随机多谢数据,model见后文.也需要random进行随机 from model import User, Engine from sqlal ...