Skip to content

Instantly share code, notes, and snippets.

@lahma
Created December 23, 2021 07:12
Show Gist options
  • Save lahma/13b1c32817c12aaacaacb428fe11d813 to your computer and use it in GitHub Desktop.
Save lahma/13b1c32817c12aaacaacb428fe11d813 to your computer and use it in GitHub Desktop.
String search experiments
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.22000
AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores
.NET SDK=6.0.101
  [Host]     : .NET 6.0.1 (6.0.121.56705), X64 RyuJIT
  Job-PVCLFY : .NET 6.0.1 (6.0.121.56705), X64 RyuJIT
  Job-ZTLPVD : .NET Framework 4.8 (4.8.4420.0), X64 RyuJIT

Method Job Runtime Toolchain Mean Error StdDev Median Ratio RatioSD
IndexOf_String Job-PVCLFY .NET 6.0 net6.0 2.467 ns 0.0093 ns 0.0083 ns 2.465 ns 0.30 0.02
IndexOf_String Job-ZTLPVD .NET Framework 4.8 net48 7.922 ns 0.1901 ns 0.5484 ns 7.701 ns 1.00 0.00
IndexOf_Span Job-PVCLFY .NET 6.0 net6.0 2.924 ns 0.0043 ns 0.0038 ns 2.924 ns 0.26 0.00
IndexOf_Span Job-ZTLPVD .NET Framework 4.8 net48 11.255 ns 0.0222 ns 0.0208 ns 11.261 ns 1.00 0.00
Find_String Job-PVCLFY .NET 6.0 net6.0 4.638 ns 0.1112 ns 0.1521 ns 4.613 ns 0.64 0.06
Find_String Job-ZTLPVD .NET Framework 4.8 net48 7.155 ns 0.2063 ns 0.5919 ns 6.984 ns 1.00 0.00
Find_Span_BinarySearch Job-PVCLFY .NET 6.0 net6.0 5.921 ns 0.0296 ns 0.0277 ns 5.921 ns 0.55 0.00
Find_Span_BinarySearch Job-ZTLPVD .NET Framework 4.8 net48 10.776 ns 0.0183 ns 0.0171 ns 10.767 ns 1.00 0.00
Find_HashSet Job-PVCLFY .NET 6.0 net6.0 2.647 ns 0.0052 ns 0.0049 ns 2.647 ns 0.52 0.00
Find_HashSet Job-ZTLPVD .NET Framework 4.8 net48 5.078 ns 0.0094 ns 0.0088 ns 5.077 ns 1.00 0.00
Find_Array_IndexOf Job-PVCLFY .NET 6.0 net6.0 4.031 ns 0.0026 ns 0.0023 ns 4.031 ns 0.36 0.00
Find_Array_IndexOf Job-ZTLPVD .NET Framework 4.8 net48 11.308 ns 0.0595 ns 0.0556 ns 11.309 ns 1.00 0.00
Find_Array_BinarySearch Job-PVCLFY .NET 6.0 net6.0 6.941 ns 0.0485 ns 0.0454 ns 6.925 ns 0.64 0.00
Find_Array_BinarySearch Job-ZTLPVD .NET Framework 4.8 net48 10.855 ns 0.0144 ns 0.0112 ns 10.852 ns 1.00 0.00
public class StringBenchmark
{
private const string testString = "asldalödkaösldkalödaXsadasdsadas";
private const string binarySearch = "abcdefghijklmnopqrstu";
private static readonly char[] binarySearchArray = binarySearch.ToArray();
private static readonly HashSet<char> BinarySearchHashSet = new();
[GlobalSetup]
public void Setup()
{
foreach (var c in binarySearch)
{
BinarySearchHashSet.Add(c);
}
}
[Benchmark]
public int IndexOf_String()
{
return testString.IndexOf('X');
}
[Benchmark]
public int IndexOf_Span()
{
return testString.AsSpan().IndexOf('X');
}
[Benchmark]
public int Find_String()
{
return binarySearch.IndexOf('r');
}
[Benchmark]
public int Find_Span_BinarySearch()
{
return binarySearch.AsSpan().BinarySearch('r');
}
[Benchmark]
public bool Find_HashSet()
{
return BinarySearchHashSet.Contains('r');
}
[Benchmark]
public int Find_Array_IndexOf()
{
return Array.IndexOf(binarySearchArray, 'r');
}
[Benchmark]
public int Find_Array_BinarySearch()
{
return Array.BinarySearch(binarySearchArray, 'r');
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment