Skip to content

SoftStoneDevelop/StringBuilderArray

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StringBuilderArray

Nuget Downloads Stars License

Collect the resulting string without allocating memory.

Benchmark:

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 = "StringBuilder")]
        public void StringBuilder()
        {
            _sb.ToString();
        }

        [Benchmark(Description = "StringBuilderArray")]
        public void StringBuilderArray()
        {
            _sbArr.ToString();
        }
Method StrLength Mean Ratio Allocated Alloc Ratio
StringBuilder 5 1.045 μs 1.00 14.28 KB 1.00
StringBuilderArray 5 18.980 μs 18.20 14.28 KB 1.00
StringBuilder 7 1.658 μs 1.00 18.19 KB 1.00
StringBuilderArray 7 18.900 μs 11.91 18.19 KB 1.00
StringBuilder 10 1.445 μs 1.00 24.05 KB 1.00
StringBuilderArray 10 19.863 μs 13.96 24.05 KB 1.00
StringBuilder 50 7.270 μs 1.00 102.17 KB 1.00
StringBuilderArray 50 21.000 μs 3.43 102.17 KB 1.00
StringBuilder 100 7.833 μs 1.00 199.83 KB 1.00
StringBuilderArray 100 30.762 μs 4.27 199.83 KB 1.00
StringBuilder 1000 492.531 μs 1.00 1957.64 KB 1.00
StringBuilderArray 1000 542.429 μs 1.11 1957.64 KB 1.00
StringBuilder 2500 1,401.836 μs 1.00 4887.33 KB 1.00
StringBuilderArray 2500 1,362.585 μs 0.98 4887.33 KB 1.00
StringBuilder 5000 2,924.100 μs 1.00 9770.14 KB 1.00
StringBuilderArray 5000 2,786.989 μs 0.98 9770.14 KB 1.00
StringBuilder 10000 5,630.200 μs 1.00 19535.77 KB 1.00
StringBuilderArray 10000 5,176.920 μs 0.92 19535.77 KB 1.00
StringBuilder 100000 26,069.379 μs 1.00 195317.02 KB 1.00
StringBuilderArray 100000 20,565.615 μs 0.80 195317.02 KB 1.00
StringBuilder 500000 124,607.154 μs 1.00 976567.02 KB 1.00
StringBuilderArray 500000 105,281.508 μs 0.84 976567.02 KB 1.00
StringBuilder 1071741 192,839.555 μs 1.00 2093248.66 KB 1.00
StringBuilderArray 1071741 153,743.317 μs 0.80 2093248.66 KB 1.00

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

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

        [Benchmark(Description = "StringBuilderArray")]
        public void StringBuilderArray()
        {
            var sb = new StringBuilderArray.StringBuilderArray();
            for (int i = 0; i < 1000; i++)
            {
                sb.AppendLine(_str);
            }
        }
Method StrLength Mean Ratio Allocated Alloc Ratio
StringBuilder 5 16.62 μs 1.00 17.29 KB 1.00
StringBuilderArray 5 16.81 μs 1.02 21.07 KB 1.22
StringBuilder 7 17.74 μs 1.00 32.98 KB 1.00
StringBuilderArray 7 15.84 μs 0.90 21.07 KB 0.64
StringBuilder 10 17.89 μs 1.00 32.98 KB 1.00
StringBuilderArray 10 15.82 μs 0.86 21.07 KB 0.64
StringBuilder 50 19.85 μs 1.00 104.77 KB 1.00
StringBuilderArray 50 15.84 μs 0.80 21.07 KB 0.20
StringBuilder 100 28.90 μs 1.00 214.56 KB 1.00
StringBuilderArray 100 15.95 μs 0.59 21.07 KB 0.10
StringBuilder 1000 95.42 μs 1.00 1978.48 KB 1.00
StringBuilderArray 1000 15.80 μs 0.17 21.07 KB 0.01
StringBuilder 2500 404.60 μs 1.00 4917.34 KB 1.000
StringBuilderArray 2500 16.11 μs 0.05 21.07 KB 0.004
StringBuilder 5000 1,825.35 μs 1.000 9814.2 KB 1.000
StringBuilderArray 5000 16.75 μs 0.009 21.07 KB 0.002
StringBuilder 10000 2,750.18 μs 1.000 19627.59 KB 1.000
StringBuilderArray 10000 15.68 μs 0.006 21.07 KB 0.001
StringBuilder 100000 29,660.86 μs 1.000 195486.03 KB 1.000
StringBuilderArray 100000 16.90 μs 0.001 21.07 KB 0.000
StringBuilder 500000 88,897.48 μs 1.000 976744.34 KB 1.000
StringBuilderArray 500000 16.94 μs 0.000 21.07 KB 0.000
StringBuilder 1071741 99,606.53 μs 1.000 2093416.13 KB 1.000
StringBuilderArray 1071741 17.27 μs 0.000 21.07 KB 0.000

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

        [Benchmark(Baseline = true, 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 = "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);
            }
        }
Method StrLength Mean Ratio Allocated Alloc Ratio
StringBuilder 5 22.59 μs 1.00 33.31 KB 1.00
StringBuilderArray 5 21.73 μs 0.97 41.41 KB 1.24
StringBuilder 7 21.33 μs 1.00 54.1 KB 1.00
StringBuilderArray 7 22.23 μs 1.04 41.41 KB 0.77
StringBuilder 10 22.01 μs 1.00 61.13 KB 1.00
StringBuilderArray 10 20.50 μs 0.96 41.41 KB 0.68
StringBuilder 50 29.93 μs 1.00 207.92 KB 1.00
StringBuilderArray 50 21.05 μs 0.71 41.41 KB 0.20
StringBuilder 100 31.54 μs 1.00 427.09 KB 1.00
StringBuilderArray 100 20.36 μs 0.64 41.41 KB 0.10
StringBuilder 1000 606.54 μs 1.00 3947.25 KB 1.00
StringBuilderArray 1000 21.36 μs 0.04 41.41 KB 0.01
StringBuilder 2500 1,686.58 μs 1.00 9811.89 KB 1.000
StringBuilderArray 2500 20.51 μs 0.01 41.41 KB 0.004
StringBuilder 5000 4,623.29 μs 1.000 19583.76 KB 1.000
StringBuilderArray 5000 21.13 μs 0.005 41.41 KB 0.002
StringBuilder 10000 8,393.39 μs 1.000 39166.66 KB 1.000
StringBuilderArray 10000 20.46 μs 0.002 41.41 KB 0.001
StringBuilder 100000 42,374.85 μs 1.000 390818.06 KB 1.000
StringBuilderArray 100000 21.80 μs 0.001 41.41 KB 0.000
StringBuilder 500000 163,509.21 μs 1.000 1953470.91 KB 1.000
StringBuilderArray 500000 20.45 μs 0.000 41.41 KB 0.000
StringBuilder 1071741 184,949.84 μs 1.000 4186765.65 KB 1.000
StringBuilderArray 1071741 21.60 μs 0.000 41.41 KB 0.000

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

        [Benchmark(Baseline = true, 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);
        }

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

            sb.Insert(0, _str);

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

            //after 5 str from start
            sb.Insert(96, _str);
        }
Method StrLength Mean Ratio Allocated Alloc Ratio
StringBuilder 5 1.962 μs 1.00 2.31 KB 1.00
StringBuilderArray 5 3.721 μs 1.88 2.04 KB 0.88
StringBuilder 7 2.079 μs 1.00 3.38 KB 1.00
StringBuilderArray 7 3.737 μs 1.84 2.04 KB 0.60
StringBuilder 10 2.153 μs 1.00 3.38 KB 1.00
StringBuilderArray 10 4.000 μs 1.87 2.04 KB 0.60
StringBuilder 50 3.168 μs 1.00 14.24 KB 1.00
StringBuilderArray 50 3.861 μs 1.26 2.04 KB 0.14
StringBuilder 100 3.164 μs 1.00 27.02 KB 1.00
StringBuilderArray 100 4.023 μs 1.26 2.04 KB 0.08
StringBuilder 1000 10.162 μs 1.00 210.98 KB 1.000
StringBuilderArray 1000 3.784 μs 0.37 2.04 KB 0.010
StringBuilder 2500 20.950 μs 1.00 506.12 KB 1.000
StringBuilderArray 2500 3.828 μs 0.18 2.04 KB 0.004
StringBuilder 5000 40.233 μs 1.00 1022.95 KB 1.000
StringBuilderArray 5000 3.850 μs 0.10 2.04 KB 0.002
StringBuilder 10000 71.107 μs 1.00 2019.62 KB 1.000
StringBuilderArray 10000 3.971 μs 0.06 2.04 KB 0.001
StringBuilder 100000 5,580.048 μs 1.000 20133.65 KB 1.000
StringBuilderArray 100000 3.967 μs 0.001 2.04 KB 0.000
StringBuilder 500000 13,838.945 μs 1.000 100610.3 KB 1.000
StringBuilderArray 500000 3.982 μs 0.000 2.04 KB 0.000
StringBuilder 1071741 15,602.540 μs 1.000 215621.21 KB 1.000
StringBuilderArray 1071741 3.875 μs 0.000 2.04 KB 0.000