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 ...
随机推荐
- Postman 汉化教程
Postman 汉化教程(Postman中文版) 迷恋自留地 postman官网下载地址 https://www.postman.com/downloads/ postman汉化包 https://g ...
- 《JavaScript 模式》读书笔记(7)— 设计模式1
这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用.这也是为什么需要自己熟悉并谈论这些模式的原因. 虽然这些设计模式是与语言和实现方式无关的,并且人们已经对此研究了多年,但都主要是从强 ...
- 鸿蒙UI开发快速入门 —— part01: 装饰器&UI描述
1. 背景 在鸿蒙开发中,ArkTS是优选的主力应用开发语言. ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集. 因此,在学习Ar ...
- 非root用户使用AntDeploy部署docker
AntDeploy这个东西非常好用,可以直接将.NET CORE的程序直接发布到docker,刚好我有这个需求,但是程序默认给的账户示例是root账户的,需要对于需要分散开发的同学来说,这个东西风险有 ...
- arch 输入法
输入法配置 输入法采用fcitx + Sogou的组合,安装需要的包: yay -S fcitx fcitx-im fcitx-configtool fcitx-sogoupinyin 然后写一个fc ...
- 【转载】获取Java接口的所有实现类
https://www.cnblogs.com/wangzhen-fly/p/11002814.html 前言:想看基于spring 的最简单实现方法,请直接看 第七步. 本文价值在于 包扫描的原理探 ...
- FISCO BCOS 控制台 部署合约 调用 查看已部署合约的地址
deploy 部署合约.(默认提供HelloWorld合约和TableTest.sol进行示例使用) 参数: 合约路径:合约文件的路径,支持相对路径.绝对路径和默认路径三种方式.用户输入为文件名时,从 ...
- 买苹果MacBook Pro ,有必要买care吗?
先了解一下AppleCare+ for Mac的服务范围:将原先的一年保修延长至三年,并且提供两次收取服务费的意外保修服务,以及当电池寿命低于80%时免费的电池更换.其中,意外保修服务依然是要收费的, ...
- Qt音视频开发28-ffmpeg解码本地摄像头(yuv422转yuv420)
一.前言 一开始用ffmpeg做的是视频流的解析,后面增加了本地视频文件的支持,到后面发现ffmpeg也是支持本地摄像头设备的,只要是原则上打通的比如win系统上相机程序.linux上茄子程序可以正常 ...
- Qt音视频开发11-通用监控布局控件(开源)
一.前言 自从做监控系统以来,就一直有打算将这个功能独立出来一个类,这样的话很多系统用到此类布局切换,通用这个类就行,而且后期此布局会增加其他异形布局,甚至按照16:9之类的比例生成布局,之前此功能直 ...