首页 > 编程语言 >详解C# List<T>的Contains,Exists,Any,Where性能对比

详解C# List<T>的Contains,Exists,Any,Where性能对比

时间:2023-03-28 14:37:49浏览次数:37  
标签:xiaoming Exists Person C# Contains persons Stopwatch new Id

https://zxbcw.cn/post/201932/

新建一个Person类

1 2 3 4 5 6 7 8 9 10 11 public class Person   {     public Person(string name,int id)     {       Name = name;       Id = id;     }     public string Name { get; set; }     public int Id { get; set; }     }

初始化List 中有一百万条数据,然后分别通过每种方法判断xiaoming是否在List中,代码如下

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 static void Main(string[] args)     {       List<Person> persons = new List<Person>();       //初始化persons数据       for (int i = 0; i < 1000000; i++)       {         Person person = new Person("My" + i,i);         persons.Add(person);       }       Person xiaoming=new Person("My999999", 999999);               //下面通过三种方法判断persons中是否包含xiaoming       Stopwatch watch = new Stopwatch();       watch.Start();       bool a = persons.Contains(xiaoming);       watch.Stop();         Stopwatch watch1 = new Stopwatch();       watch1.Start();       bool b = persons.Exists(x=>x.Id==xiaoming.Id);       watch1.Stop();         Stopwatch watch2 = new Stopwatch();       watch2.Start();       bool c = persons.Where(x=>x.Id==xiaoming.Id).Any();       watch2.Stop();         Stopwatch watch3 = new Stopwatch();       watch3.Start();       bool d = persons.Any(x => x.Id == xiaoming.Id);       watch3.Stop();         Console.WriteLine("Contains耗时:" + watch.Elapsed.TotalMilliseconds);       Console.WriteLine("Exists耗时:" + watch1.Elapsed.TotalMilliseconds);       Console.WriteLine("Where耗时:" + watch2.Elapsed.TotalMilliseconds);       Console.WriteLine("Any耗时:" + watch3.Elapsed.TotalMilliseconds);       Console.ReadLine();     }

执行结果如下图所示

结论

通过上图可以看出性能排序为

Contains > Exists > Where > Any

注意:
Contains中不能带查询条件

标签:xiaoming,Exists,Person,C#,Contains,persons,Stopwatch,new,Id
From: https://www.cnblogs.com/Dongmy/p/17265023.html

相关文章

  • 阿里云ECS磁盘扩容
    环境:OS:Centos7 1.控制台添加云盘 2.创建pvpvcreate/dev/sdc 3.扩充VG[root@19c~]#vgsVG#PV#LV#SNAttrVSizeVFreecentos220......
  • 类 ChatGPT 开源软件,开发者用的上吗?
    声明:本文是PreethiCheguri所著文章《ChatGPTEquivalentIsOpen-Source,ButitIsofNoUsetoDevelopers》的中文译文。原文链接:https://www.analyticsinsight.net......
  • [软件体系结构/架构]零拷贝技术(Zero-copy)[转发]
    0前言近期遇到难题:1个大数据集的查询导出API,因从数据库查询后占用内存极大,每次调用将消耗近100MB的JVM内存资源。故现需考虑研究和应用零拷贝技术。如下全文摘自:看一......
  • vvic根据ID取商品详情 API
    为了进行电商平台的API开发,首先我们需要做下面几件事情。1)开发者注册一个账号2)然后为每个vvic应用注册一个应用程序键(AppKey)。3)下载vvicAPI的SDK并掌握基本的API基础知......
  • Percona Server for MySQL 5.6.10-60.2发布
    PerconaServerforMySQL5.6.10-60.2发布作者:chszsPercona于2013年3月14日发布PerconaServerforMySQL5.6.10-60.2版。下载地址见:http://www.percona.com/downloads/Pe......
  • Google Bard初步评测:与ChatGPT的性能、设计和功能对比分析
    谷歌Bard,搜索巨头对ChatGPT的回应,终于来了。但这值得等待吗?它与网络上涌现的许多其他人工智能聊天机器人相比如何嗯,第一个很容易回答。根据我们的初步印象,谷歌决定在它......
  • Couchbase Server 2.0.1企业版发布
    CouchbaseServer2.0.1企业版发布作者:chszs最近两天,CouchbaseServer2.0.1企业版发布了。正如大家预料的那样,2.0.1版是2.0版的维护版,它并没有增加很多新特征,而主要集中于......
  • PrimeFaces主题选择器
    PrimeFaces主题选择器作者:chszsPrimeFaces集成了ThemeRollerCSS框架,而且预置了37种主题样式。可以使用在线的ThemeRoller主题产生器工具生成自定义的主题。应用一个主题到P......
  • PrimeFaces布局技巧
    PrimeFaces布局技巧作者:chszs布局组件Layout是一个高度可定制的边框布局模型,它可以很轻松地创建复杂的网页布局,即使不懂Web设计。一、布局组件Layout的属性布局组件Layout的......
  • SLF4J和Logback日志框架详解
    SLF4J和Logback日志框架详解作者:chszs本文讲述SLF4J和Logback日志框架。  SLF4J是一套简单的日志外观模式的JavaAPI,帮助在项目部署时对接各种日志实现。LogBack在运行时......