BenchmarkDotNet=v0.13.1, OS=arch
AMD Ryzen 7 PRO 4750U with Radeon Graphics, 1 CPU, 16 logical and 8 physical cores
.NET SDK=6.0.100
[Host] : .NET 6.0.0 (6.0.21.56401), X64 RyuJIT
DefaultJob : .NET 6.0.0 (6.0.21.56401), X64 RyuJIT
Method |
StringLength |
Take |
Mean |
Error |
StdDev |
Median |
SubstringMethod |
50 |
30 |
20.625 ns |
0.0661 ns |
0.0618 ns |
20.637 ns |
LinqMethod |
50 |
30 |
402.938 ns |
1.7166 ns |
1.6057 ns |
403.620 ns |
SubstringMethod |
50 |
50 |
1.795 ns |
0.0018 ns |
0.0014 ns |
1.795 ns |
LinqMethod |
50 |
50 |
568.616 ns |
1.5141 ns |
1.4163 ns |
568.938 ns |
SubstringMethod |
50 |
100 |
1.859 ns |
0.0532 ns |
0.0472 ns |
1.881 ns |
LinqMethod |
50 |
100 |
579.650 ns |
4.3708 ns |
4.0885 ns |
580.923 ns |
SubstringMethod |
50 |
250 |
1.832 ns |
0.0079 ns |
0.0066 ns |
1.830 ns |
LinqMethod |
50 |
250 |
581.657 ns |
2.2534 ns |
1.9975 ns |
582.368 ns |
SubstringMethod |
50 |
500 |
1.889 ns |
0.0548 ns |
0.0513 ns |
1.859 ns |
LinqMethod |
50 |
500 |
577.001 ns |
1.8593 ns |
1.6482 ns |
576.912 ns |
SubstringMethod |
50 |
750 |
1.982 ns |
0.0070 ns |
0.0062 ns |
1.980 ns |
LinqMethod |
50 |
750 |
575.279 ns |
1.7676 ns |
1.3801 ns |
575.730 ns |
SubstringMethod |
50 |
1000 |
1.950 ns |
0.0051 ns |
0.0045 ns |
1.951 ns |
LinqMethod |
50 |
1000 |
576.387 ns |
1.6418 ns |
1.4555 ns |
576.774 ns |
SubstringMethod |
100 |
30 |
21.008 ns |
0.0769 ns |
0.0719 ns |
21.007 ns |
LinqMethod |
100 |
30 |
409.292 ns |
0.9057 ns |
0.7563 ns |
409.553 ns |
SubstringMethod |
100 |
50 |
26.941 ns |
0.0590 ns |
0.0493 ns |
26.931 ns |
LinqMethod |
100 |
50 |
598.806 ns |
2.3549 ns |
2.0875 ns |
598.949 ns |
SubstringMethod |
100 |
100 |
1.879 ns |
0.0053 ns |
0.0050 ns |
1.878 ns |
LinqMethod |
100 |
100 |
909.588 ns |
1.7740 ns |
1.5726 ns |
910.137 ns |
SubstringMethod |
100 |
250 |
1.954 ns |
0.0752 ns |
0.0703 ns |
1.900 ns |
LinqMethod |
100 |
250 |
953.044 ns |
2.3524 ns |
2.0854 ns |
952.701 ns |
SubstringMethod |
100 |
500 |
1.886 ns |
0.0032 ns |
0.0030 ns |
1.887 ns |
LinqMethod |
100 |
500 |
924.697 ns |
2.7867 ns |
2.1757 ns |
923.855 ns |
SubstringMethod |
100 |
750 |
2.305 ns |
0.0086 ns |
0.0076 ns |
2.303 ns |
LinqMethod |
100 |
750 |
930.086 ns |
13.3432 ns |
12.4812 ns |
922.939 ns |
SubstringMethod |
100 |
1000 |
1.925 ns |
0.0075 ns |
0.0067 ns |
1.922 ns |
LinqMethod |
100 |
1000 |
932.909 ns |
1.9156 ns |
1.6982 ns |
933.457 ns |
SubstringMethod |
500 |
30 |
20.899 ns |
0.0714 ns |
0.0596 ns |
20.908 ns |
LinqMethod |
500 |
30 |
413.546 ns |
1.2667 ns |
1.1849 ns |
413.573 ns |
SubstringMethod |
500 |
50 |
27.520 ns |
0.0430 ns |
0.0402 ns |
27.537 ns |
LinqMethod |
500 |
50 |
576.767 ns |
2.7694 ns |
2.5905 ns |
575.664 ns |
SubstringMethod |
500 |
100 |
38.448 ns |
0.2826 ns |
0.2644 ns |
38.378 ns |
LinqMethod |
500 |
100 |
966.031 ns |
4.6745 ns |
4.3725 ns |
965.996 ns |
SubstringMethod |
500 |
250 |
81.390 ns |
0.1897 ns |
0.1774 ns |
81.341 ns |
LinqMethod |
500 |
250 |
1,902.541 ns |
2.2982 ns |
2.0373 ns |
1,901.904 ns |
SubstringMethod |
500 |
500 |
1.903 ns |
0.0108 ns |
0.0091 ns |
1.901 ns |
LinqMethod |
500 |
500 |
3,463.136 ns |
9.8791 ns |
9.2409 ns |
3,467.685 ns |
SubstringMethod |
500 |
750 |
1.977 ns |
0.0082 ns |
0.0076 ns |
1.980 ns |
LinqMethod |
500 |
750 |
3,486.980 ns |
5.0286 ns |
4.1991 ns |
3,485.824 ns |
SubstringMethod |
500 |
1000 |
1.825 ns |
0.0062 ns |
0.0058 ns |
1.824 ns |
LinqMethod |
500 |
1000 |
3,450.507 ns |
6.3941 ns |
5.9810 ns |
3,450.266 ns |
SubstringMethod |
1000 |
30 |
21.150 ns |
0.0624 ns |
0.0553 ns |
21.154 ns |
LinqMethod |
1000 |
30 |
423.572 ns |
1.7467 ns |
1.5484 ns |
423.179 ns |
SubstringMethod |
1000 |
50 |
27.403 ns |
0.0606 ns |
0.0538 ns |
27.414 ns |
LinqMethod |
1000 |
50 |
599.775 ns |
8.3073 ns |
7.7706 ns |
603.353 ns |
SubstringMethod |
1000 |
100 |
39.134 ns |
0.1707 ns |
0.1597 ns |
39.169 ns |
LinqMethod |
1000 |
100 |
947.941 ns |
2.6026 ns |
2.1733 ns |
947.720 ns |
SubstringMethod |
1000 |
250 |
82.203 ns |
0.1889 ns |
0.1675 ns |
82.173 ns |
LinqMethod |
1000 |
250 |
1,883.885 ns |
2.2884 ns |
2.0286 ns |
1,884.200 ns |
SubstringMethod |
1000 |
500 |
151.939 ns |
0.5527 ns |
0.5170 ns |
151.924 ns |
LinqMethod |
1000 |
500 |
3,569.682 ns |
9.6536 ns |
8.0612 ns |
3,574.219 ns |
SubstringMethod |
1000 |
750 |
223.917 ns |
0.4288 ns |
0.3801 ns |
224.018 ns |
LinqMethod |
1000 |
750 |
5,259.892 ns |
14.5699 ns |
13.6287 ns |
5,262.228 ns |
SubstringMethod |
1000 |
1000 |
1.994 ns |
0.0045 ns |
0.0042 ns |
1.995 ns |
LinqMethod |
1000 |
1000 |
6,829.357 ns |
23.5466 ns |
22.0255 ns |
6,833.998 ns |
namespace SubstringBench;
using System;
using System.Linq;
using BenchmarkDotNet.Attributes;
public class Substring
{
private string subject = "";
[Params(50, 100, 500, 1000)]
public int StringLength { get; set; }
[Params(30, 50, 100, 250, 500, 750, 1000)]
public int Take { get; set; }
[GlobalSetup]
public void Setup()
{
this.subject = new string('Z', this.StringLength);
}
[Benchmark]
public string SubstringMethod() => this.subject.Substring(0, Math.Min(this.subject.Length, this.Take));
[Benchmark]
public string LinqMethod() => new string(this.subject.Take(this.Take).ToArray());
}