Skip to content

Instantly share code, notes, and snippets.

@hypervis0r
Created May 14, 2022 00:46
Show Gist options
  • Save hypervis0r/2062848c44edb85871e13427cab64ad2 to your computer and use it in GitHub Desktop.
Save hypervis0r/2062848c44edb85871e13427cab64ad2 to your computer and use it in GitHub Desktop.
List<T> Any vs Exists vs Contains
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
[HtmlExporter]
public class LINQBenchmarks
{
[Params(10_000, 100_000, 1_000_000, 10_000_000)]
public int N;
private List<string> list { get; set; } = new List<string>();
[GlobalSetup]
public void GlobalSetup()
{
Random r = new Random();
for (int i = 0; i < N; i++)
{
int it = r.Next(0, 100);
list.Add(new string('0', it));
}
list.Add("0123456789012");
}
[Benchmark]
public bool Any()
{
return list.Any(o => o == "0123456789012");
}
[Benchmark]
public bool Exists()
{
return list.Exists(o => o == "0123456789012");
}
[Benchmark]
public bool Contains()
{
return list.Contains("0123456789012");
}
}
public class Program
{
public static void Main(string[] args)
{
var summary = BenchmarkRunner.Run(typeof(Program).Assembly);
}
}
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19044.1645 (21H2)
AMD Ryzen 9 3900X, 1 CPU, 24 logical and 12 physical cores
.NET SDK=6.0.201
  [Host]     : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT
  DefaultJob : .NET 6.0.4 (6.0.422.16404), X64 RyuJIT
Method N Mean Error StdDev
Any 10000 118.93 μs 1.272 μs 1.190 μs
Exists 10000 26.74 μs 0.241 μs 0.226 μs
Contains 10000 27.60 μs 0.202 μs 0.189 μs
Any 100000 1,205.88 μs 22.752 μs 24.344 μs
Exists 100000 298.77 μs 5.601 μs 6.226 μs
Contains 100000 319.28 μs 6.345 μs 15.564 μs
Any 1000000 13,208.13 μs 236.847 μs 339.679 μs
Exists 1000000 8,192.19 μs 84.736 μs 70.758 μs
Contains 1000000 8,295.04 μs 144.080 μs 201.980 μs
Any 10000000 131,926.95 μs 2,610.394 μs 3,006.134 μs
Exists 10000000 89,094.71 μs 1,732.868 μs 2,313.329 μs
Contains 10000000 88,575.13 μs 1,595.753 μs 2,184.285 μs

The results of this benchmark show that List<T>.Exists and List<T>.Contains are both faster than List<T>.Any.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment