Skip to content

Latest commit

 

History

History
320 lines (280 loc) · 29.5 KB

Benchmark.md

File metadata and controls

320 lines (280 loc) · 29.5 KB
ToString
[IterationSetup]
public void Setup()
{
    _str = new string('S', StrLength);
    _sb = new System.Text.StringBuilder();
    for (int i = 0; i < 1000; i++)
    {
        _sb.AppendLine(_str);
    }

    _sbArr = new StringBuilderArray.StringBuilderArray();
    for (int i = 0; i < 1000; i++)
    {
        _sbArr.AppendLine(_str);
    }
}

[Benchmark(Baseline = true, Description = "StringBuilderArray")]
public void StringBuilderArray()
{
    _sbArr.ToString();
}

[Benchmark(Description = "StringBuilder")]
public void StringBuilder()
{
    _sb.ToString();
}
Method Job Runtime StrLength Mean Error StdDev Median Ratio RatioSD Allocated Alloc Ratio
StringBuilderArray .NET 10.0 .NET 10.0 100 26.243 μs 0.5000 μs 0.4433 μs 26.050 μs 1.00 0.02 199.24 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100 7.625 μs 0.1416 μs 0.1390 μs 7.650 μs 0.29 0.01 199.24 KB 1.00
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100 10.238 μs 0.2063 μs 0.4983 μs 10.200 μs 1.00 0.07 199.9 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100 7.412 μs 0.1492 μs 0.3983 μs 7.600 μs 0.73 0.05 199.29 KB 1.00
StringBuilderArray .NET 10.0 .NET 10.0 1000 649.375 μs 25.3283 μs 71.0232 μs 615.400 μs 1.01 0.15 1957.05 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 1000 617.833 μs 27.0701 μs 79.8167 μs 585.000 μs 0.96 0.15 1957.05 KB 1.00
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 1000 605.118 μs 23.6142 μs 64.6435 μs 579.000 μs 1.01 0.14 1957.43 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 1000 623.986 μs 34.2037 μs 100.3135 μs 573.300 μs 1.04 0.19 1957.43 KB 1.00
StringBuilderArray .NET 10.0 .NET 10.0 10000 6,269.077 μs 107.4912 μs 132.0089 μs 6,235.600 μs 1.00 0.03 19535.18 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 10000 6,745.038 μs 94.4811 μs 78.8960 μs 6,765.900 μs 1.08 0.03 19535.18 KB 1.00
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 10000 6,333.985 μs 95.0184 μs 79.3446 μs 6,331.600 μs 1.00 0.02 19535.23 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 10000 6,743.123 μs 93.7938 μs 78.3221 μs 6,728.600 μs 1.06 0.02 19535.18 KB 1.00
StringBuilderArray .NET 10.0 .NET 10.0 100000 36,991.816 μs 4,536.7692 μs 13,376.7673 μs 37,084.200 μs 1.15 0.60 195316.43 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100000 43,104.633 μs 5,045.5020 μs 14,876.7775 μs 29,825.150 μs 1.34 0.68 195316.43 KB 1.00
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100000 36,667.143 μs 4,421.4612 μs 13,036.7792 μs 36,614.150 μs 1.14 0.59 195316.48 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100000 43,404.288 μs 4,890.3970 μs 14,419.4471 μs 44,659.250 μs 1.35 0.67 195316.48 KB 1.00

AppendLine
[IterationSetup]
public void Setup()
{
    _str = new string('S', StrLength);
}

[Benchmark(Baseline = true, Description = "StringBuilderArray")]
public void StringBuilderArray()
{
    var sb = new StringBuilderArray.StringBuilderArray();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLine(_str);
    }
}

[Benchmark(Description = "StringBuilder")]
public void StringBuilder()
{
    var sb = new System.Text.StringBuilder();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLine(_str);
    }
}

[Benchmark(Description = "DefaultInterpolatedStringHandler")]
public void DefaultInterpolatedStringHandler()
{
    var sb = new DefaultInterpolatedStringHandler();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLiteral(_str);
		sb.AppendLiteral(Environment.NewLine);
    }
}
Method Job Runtime StrLength Mean Error StdDev Median Ratio RatioSD Gen0 Gen1 Gen2 Allocated Alloc Ratio
StringBuilderArray .NET 10.0 .NET 10.0 100 28.359 μs 0.8982 μs 2.5186 μs 28.900 μs 1.01 0.14 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100 23.810 μs 0.4865 μs 1.3643 μs 23.400 μs 0.85 0.10 - - - 213.98 KB 10.45
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 100 26.079 μs 0.5059 μs 1.2505 μs 25.900 μs 0.93 0.10 - - - 256.02 KB 12.50
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100 4.838 μs 0.1088 μs 0.3070 μs 4.800 μs 1.00 0.09 - - - 21.14 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100 12.544 μs 0.3960 μs 1.0907 μs 12.150 μs 2.60 0.28 - - - 214.35 KB 10.14
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 100 11.008 μs 0.1388 μs 0.1084 μs 11.000 μs 2.28 0.14 - - - 256.07 KB 12.11
StringBuilderArray .NET 10.0 .NET 10.0 1000 30.324 μs 1.6911 μs 4.8247 μs 29.900 μs 1.03 0.23 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 1000 92.300 μs 1.3518 μs 1.3277 μs 92.050 μs 3.12 0.50 - - - 1977.89 KB 96.56
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 1000 296.493 μs 5.6953 μs 5.0488 μs 296.150 μs 10.03 1.62 - - - 2048.02 KB 99.98
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 1000 4.514 μs 0.0916 μs 0.1125 μs 4.500 μs 1.00 0.03 - - - 21.09 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 1000 72.052 μs 1.4308 μs 2.0972 μs 71.200 μs 15.97 0.60 - - - 1978.55 KB 93.80
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 1000 279.709 μs 5.5184 μs 10.4994 μs 276.000 μs 62.01 2.74 - - - 2048.4 KB 97.11
StringBuilderArray .NET 10.0 .NET 10.0 10000 30.478 μs 1.9075 μs 5.5035 μs 29.700 μs 1.03 0.27 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 10000 2,677.697 μs 59.8558 μs 154.5069 μs 2,659.400 μs 90.74 17.27 2000.0000 1000.0000 - 19627.01 KB 958.15
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 10000 3,900.968 μs 77.1336 μs 102.9711 μs 3,921.200 μs 132.20 24.21 - - - 32768.02 KB 1,599.66
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 10000 6.123 μs 0.1110 μs 0.0927 μs 6.100 μs 1.00 0.02 - - - 21.14 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 10000 2,502.418 μs 52.9507 μs 148.4793 μs 2,475.400 μs 408.77 24.85 2000.0000 1000.0000 - 19627.05 KB 928.40
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 10000 4,139.665 μs 63.3416 μs 52.8931 μs 4,136.750 μs 676.22 12.89 - - - 32768.68 KB 1,550.03
StringBuilderArray .NET 10.0 .NET 10.0 100000 32.005 μs 1.7038 μs 4.8885 μs 33.600 μs 1.03 0.24 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100000 28,569.189 μs 1,551.8123 μs 4,575.5538 μs 25,986.250 μs 917.15 220.61 4000.0000 4000.0000 3000.0000 195492.71 KB 9,543.50
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 100000 31,571.933 μs 470.7139 μs 440.3061 μs 31,444.100 μs 1,013.55 180.92 - - - 262144.02 KB 12,797.27
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100000 4.595 μs 0.0935 μs 0.1710 μs 4.500 μs 1.00 0.05 - - - 21.09 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100000 27,796.309 μs 1,528.3536 μs 4,506.3853 μs 25,043.500 μs 6,056.71 1,000.38 4000.0000 4000.0000 3000.0000 195494.09 KB 9,267.87
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 100000 31,448.346 μs 120.6086 μs 100.7137 μs 31,460.500 μs 6,852.48 240.65 - - - 262144.4 KB 12,427.59

AppendLine + Clear
[IterationSetup]
public void Setup()
{
    _str = new string('S', StrLength);
}

[Benchmark(Baseline = true, Description = "StringBuilderArray")]
public void StringBuilderArray()
{
    var sb = new StringBuilderArray.StringBuilderArray();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLine(_str);
    }

    sb.Clear();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLine(_str);
    }
}

[Benchmark(Description = "StringBuilder")]
public void StringBuilder()
{
    var sb = new System.Text.StringBuilder();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLine(_str);
    }

    sb.Clear();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLine(_str);
    }
}

[Benchmark(Description = "DefaultInterpolatedStringHandler")]
public void DefaultInterpolatedStringHandler()
{
    var sb = new DefaultInterpolatedStringHandler();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLiteral(_str);
		sb.AppendLiteral(Environment.NewLine);
    }

    sb.Clear();
    for (int i = 0; i < 1000; i++)
    {
        sb.AppendLiteral(_str);
		sb.AppendLiteral(Environment.NewLine);
    }
}
Method Job Runtime StrLength Mean Error StdDev Median Ratio RatioSD Gen0 Gen1 Gen2 Allocated Alloc Ratio
StringBuilderArray .NET 10.0 .NET 10.0 100 32.956 μs 1.2630 μs 3.5828 μs 33.300 μs 1.01 0.16 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100 31.468 μs 0.6021 μs 1.0857 μs 31.300 μs 0.97 0.12 - - - 426.5 KB 20.82
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 100 38.065 μs 0.7575 μs 1.4952 μs 37.800 μs 1.17 0.14 - - - 256.02 KB 12.50
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100 8.983 μs 0.0499 μs 0.0389 μs 9.000 μs 1.00 0.01 - - - 20.86 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100 19.708 μs 0.3951 μs 0.8160 μs 19.400 μs 2.19 0.09 - - - 426.88 KB 20.46
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 100 20.721 μs 0.2907 μs 0.2577 μs 20.650 μs 2.31 0.03 - - - 256.4 KB 12.29
StringBuilderArray .NET 10.0 .NET 10.0 1000 32.650 μs 0.9519 μs 2.6847 μs 33.550 μs 1.01 0.12 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 1000 345.511 μs 6.6559 μs 7.1217 μs 343.700 μs 10.66 1.00 - - - 3946.66 KB 192.67
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 1000 381.535 μs 6.8739 μs 7.0589 μs 379.800 μs 11.77 1.09 - - - 2048.02 KB 99.98
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 1000 9.057 μs 0.0853 μs 0.0756 μs 9.100 μs 1.00 0.01 - - - 20.48 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 1000 329.964 μs 3.9146 μs 3.4702 μs 329.300 μs 36.43 0.47 - - - 3947.32 KB 192.70
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 1000 349.419 μs 6.8280 μs 8.1283 μs 345.600 μs 38.58 0.93 - - - 2048.02 KB 99.98
StringBuilderArray .NET 10.0 .NET 10.0 10000 34.751 μs 1.9408 μs 5.5373 μs 33.950 μs 1.03 0.23 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 10000 5,194.462 μs 85.1324 μs 83.6114 μs 5,163.050 μs 153.32 24.76 2000.0000 1000.0000 - 39166.08 KB 1,912.00
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 10000 7,797.529 μs 148.6160 μs 131.7442 μs 7,749.900 μs 230.15 37.19 - - - 32768.02 KB 1,599.66
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 10000 8.869 μs 0.0899 μs 0.0751 μs 8.900 μs 1.00 0.01 - - - 21.14 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 10000 5,062.354 μs 94.4336 μs 78.8564 μs 5,058.300 μs 570.81 9.74 2000.0000 1000.0000 - 39166.13 KB 1,852.65
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 10000 8,273.727 μs 94.1430 μs 88.0614 μs 8,281.400 μs 932.92 12.24 - - - 32768.07 KB 1,550.00
StringBuilderArray .NET 10.0 .NET 10.0 100000 35.122 μs 1.8979 μs 5.5960 μs 34.050 μs 1.03 0.23 - - - 20.48 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100000 43,075.767 μs 1,592.8508 μs 4,696.5569 μs 40,008.700 μs 1,258.13 245.75 4000.0000 4000.0000 3000.0000 390824.95 KB 19,079.17
DefaultInterpolatedStringHandler .NET 10.0 .NET 10.0 100000 62,925.650 μs 480.7037 μs 426.1313 μs 62,819.500 μs 1,837.89 297.13 - - - 262144.02 KB 12,797.27
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100000 8.933 μs 0.1804 μs 0.3014 μs 8.850 μs 1.00 0.05 - - - 21.14 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100000 38,928.962 μs 718.0704 μs 599.6213 μs 38,617.400 μs 4,362.37 154.32 4000.0000 4000.0000 3000.0000 390825.94 KB 18,486.96
DefaultInterpolatedStringHandler NativeAOT 10.0 NativeAOT 10.0 100000 63,399.427 μs 627.7553 μs 587.2027 μs 63,053.000 μs 7,104.53 236.89 - - - 262144.4 KB 12,400.03

Insert
[IterationSetup]
public void Setup()
{
    _str = new string('S', StrLength);
}

[Benchmark(Baseline = true, Description = "StringBuilderArray")]
public void StringBuilderArray()
{
    var sb = new StringBuilderArray.StringBuilderArray();
    for (int i = 0; i < 100; i++)
    {
        sb.Append(_str);
    }

    sb.InsertByIndex(99 * _str.Length, _str, StringBuilderArray.IndexDirection.FromStart);

    //in start
    sb.InsertByIndex(0, _str, StringBuilderArray.IndexDirection.FromStart);

    //after 5 str from start
    sb.InsertByIndex(5 * _str.Length, _str, StringBuilderArray.IndexDirection.FromStart);
}

[Benchmark(Description = "StringBuilder")]
public void StringBuilder()
{
    var sb = new System.Text.StringBuilder();
    for (int i = 0; i < 100; i++)
    {
        sb.Append(_str);
    }

    //before 1 str from end
    sb.Insert(99 * _str.Length, _str);

    //in start
    sb.Insert(0, _str);

    //after 5 str from start
    sb.Insert(5 * _str.Length, _str);
}
Method Job Runtime StrLength Mean Error StdDev Median Ratio RatioSD Gen0 Gen1 Gen2 Allocated Alloc Ratio
StringBuilderArray .NET 10.0 .NET 10.0 100 3.581 μs 0.1370 μs 0.3997 μs 3.450 μs 1.01 0.16 - - - 2.28 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100 13.872 μs 1.8805 μs 5.4558 μs 16.400 μs 3.92 1.60 - - - 26.43 KB 11.59
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100 1.659 μs 0.0671 μs 0.1957 μs 1.600 μs 1.01 0.17 - - - 2.28 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100 2.409 μs 0.0986 μs 0.2733 μs 2.300 μs 1.47 0.24 - - - 26.76 KB 11.73
StringBuilderArray .NET 10.0 .NET 10.0 1000 3.362 μs 0.0688 μs 0.0941 μs 3.400 μs 1.00 0.04 - - - 2.28 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 1000 9.860 μs 0.1971 μs 0.1844 μs 9.900 μs 2.94 0.10 - - - 210.39 KB 92.23
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 1000 1.386 μs 0.0296 μs 0.0687 μs 1.400 μs 1.00 0.07 - - - 2.28 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 1000 8.554 μs 0.1719 μs 0.3099 μs 8.500 μs 6.19 0.38 - - - 210.44 KB 92.25
StringBuilderArray .NET 10.0 .NET 10.0 10000 3.413 μs 0.0696 μs 0.1042 μs 3.400 μs 1.00 0.04 - - - 2.28 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 10000 69.646 μs 1.0829 μs 0.9043 μs 69.500 μs 20.42 0.66 - - - 2019.03 KB 885.05
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 10000 1.401 μs 0.0327 μs 0.0927 μs 1.400 μs 1.00 0.09 - - - 2.28 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 10000 68.360 μs 0.7078 μs 0.6620 μs 68.400 μs 49.00 3.27 - - - 2019.08 KB 885.08
StringBuilderArray .NET 10.0 .NET 10.0 100000 3.572 μs 0.0731 μs 0.1409 μs 3.500 μs 1.00 0.05 - - - 2.28 KB 1.00
StringBuilder .NET 10.0 .NET 10.0 100000 4,388.211 μs 89.3243 μs 260.5633 μs 4,425.050 μs 1,230.42 86.65 2000.0000 2000.0000 2000.0000 20133.02 KB 8,825.43
StringBuilderArray NativeAOT 10.0 NativeAOT 10.0 100000 1.400 μs 0.0000 μs 0.0000 μs 1.400 μs 1.00 0.00 - - - 2.28 KB 1.00
StringBuilder NativeAOT 10.0 NativeAOT 10.0 100000 4,302.159 μs 85.9752 μs 161.4822 μs 4,273.700 μs 3,072.97 114.13 2000.0000 2000.0000 2000.0000 20134.13 KB 8,825.92