Skip to content

Instantly share code, notes, and snippets.

@ultimaweapon
Created February 5, 2022 13:26
Show Gist options
  • Save ultimaweapon/15d52c412612fedd2812068952006122 to your computer and use it in GitHub Desktop.
Save ultimaweapon/15d52c412612fedd2812068952006122 to your computer and use it in GitHub Desktop.
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

Source

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());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment