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

 更新时间:2020年12月11日 08:43:48   作者:背过手  
这篇文章主要介绍了详解C# List<T>的Contains,Exists,Any,Where性能对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

测试

新建一个Person类

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中,代码如下

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中不能带查询条件

到此这篇关于详解C# List<T>的Contains,Exists,Any,Where性能对比的文章就介绍到这了,更多相关C# Contains,Exists,Any,Where内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#框架winform实现简单点餐系统

    C#框架winform实现简单点餐系统

    这篇文章主要为大家详细介绍了C#框架winform实现简单点餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#生成互不相同随机数的实现方法

    C#生成互不相同随机数的实现方法

    这篇文章主要介绍了C#生成互不相同随机数的实现方法,文中详细描述了C#生成互不相同随机数的各个步骤及所用到的函数,非常具有借鉴价值,需要的朋友可以参考下
    2014-09-09
  • C#创建压缩文件的实现代码

    C#创建压缩文件的实现代码

    本篇文章主要介绍了C# 创建压缩文件的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • C#实现对文件进行加密保护的示例代码

    C#实现对文件进行加密保护的示例代码

    这篇文章主要为大家详细介绍了如何利用C#实现对文件进行加密保护的功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2022-12-12
  • c# 如何使用结构体实现共用体

    c# 如何使用结构体实现共用体

    这篇文章主要介绍了c# 如何使用结构体实现共用体,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • 基于C#开发中的那些编码问题(详谈)

    基于C#开发中的那些编码问题(详谈)

    下面小编就为大家分享一篇基于C#开发中的那些编码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • C#中Invoke和BeginInvoke实际应用详解

    C#中Invoke和BeginInvoke实际应用详解

    这篇文章主要给大家介绍了关于C#中Invoke和BeginInvoke实际应用的相关资料,Invoke是对象方法,BeginInvoke是静态方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • 细说C#中的枚举:转换、标志和属性

    细说C#中的枚举:转换、标志和属性

    枚举是 C# 中最有意思的一部分,大部分开发人员只了解其中的一小部分,甚至网上绝大多数的教程也只讲解了枚举的一部分。那么,我将通过这篇文章向大家具体讲解一下枚举的知识,需要的朋友可以参考下
    2020-02-02
  • C#实现读取DataSet数据并显示在ListView控件中的方法

    C#实现读取DataSet数据并显示在ListView控件中的方法

    这篇文章主要介绍了C#实现读取DataSet数据并显示在ListView控件中的方法,涉及C#操作DataSet及ListView控件的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • C# javascript 读写Cookie的方法

    C# javascript 读写Cookie的方法

    这篇文章介绍了C# javascript 读写Cookie的方法,有需要的朋友可以参考一下
    2013-10-10

最新评论