Skip to content

Commit d32d75f

Browse files
2 parents 57b2304 + 81c55a1 commit d32d75f

File tree

1 file changed

+108
-85
lines changed

1 file changed

+108
-85
lines changed

README.md

Lines changed: 108 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,54 @@ The version of StringBuilder built on an array of strings string[]: uses less me
1515

1616
## Benchmark:
1717

18+
<details>
19+
<summary>ToString</summary>
20+
1821
```C#
1922

23+
[IterationSetup]
24+
public void Setup()
25+
{
26+
_str = new string('S', StrLength);
27+
_sb = new System.Text.StringBuilder();
28+
for (int i = 0; i < 1000; i++)
29+
{
30+
_sb.AppendLine(_str);
31+
}
32+
33+
_sbArr = new StringBuilderArray.StringBuilderArray();
34+
for (int i = 0; i < 1000; i++)
35+
{
36+
_sbArr.AppendLine(_str);
37+
}
38+
}
39+
40+
[Benchmark(Baseline = true, Description = "StringBuilder")]
41+
public void StringBuilder()
42+
{
43+
_sb.ToString();
44+
}
45+
46+
[Benchmark(Description = "StringBuilderArray")]
47+
public void StringBuilderArray()
48+
{
49+
_sbArr.ToString();
50+
}
51+
52+
```
53+
</details>
54+
<br>
55+
<details>
56+
<summary>AppendLine</summary>
57+
58+
```C#
59+
60+
[IterationSetup]
61+
public void Setup()
62+
{
63+
_str = new string('S', StrLength);
64+
}
65+
2066
[Benchmark(Baseline = true, Description = "StringBuilder")]
2167
public void StringBuilder()
2268
{
@@ -25,8 +71,6 @@ The version of StringBuilder built on an array of strings string[]: uses less me
2571
{
2672
sb.AppendLine(_str);
2773
}
28-
29-
var result = sb.ToString();
3074
}
3175

3276
[Benchmark(Description = "StringBuilderArray")]
@@ -37,53 +81,22 @@ The version of StringBuilder built on an array of strings string[]: uses less me
3781
{
3882
sb.AppendLine(_str);
3983
}
40-
41-
var result = sb.ToString();
4284
}
4385

4486
```
45-
46-
| Method | StrLength | Mean | Ratio | Allocated | Alloc Ratio |
47-
|------------------- |---------- |--------------:|------:|--------------:|------------:|
48-
| **StringBuilder** | **5** | **17.89 μs** | **1.00** | **30.98 KB** | **1.00** |
49-
| StringBuilderArray | 5 | 33.04 μs | 1.84 | 34.77 KB | 1.12 |
50-
| | | | | | |
51-
| **StringBuilder** | **7** | **19.36 μs** | **1.00** | **50.59 KB** | **1.00** |
52-
| StringBuilderArray | 7 | 33.03 μs | 1.71 | 38.67 KB | 0.76 |
53-
| | | | | | |
54-
| **StringBuilder** | **10** | **19.20 μs** | **1.00** | **56.45 KB** | **1.00** |
55-
| StringBuilderArray | 10 | 33.44 μs | 1.75 | 44.53 KB | 0.79 |
56-
| | | | | | |
57-
| **StringBuilder** | **50** | **27.21 μs** | **1.00** | **206.36 KB** | **1.00** |
58-
| StringBuilderArray | 50 | 35.86 μs | 1.25 | 122.66 KB | 0.59 |
59-
| | | | | | |
60-
| **StringBuilder** | **100** | **29.57 μs** | **1.00** | **413.8 KB** | **1.00** |
61-
| StringBuilderArray | 100 | 39.34 μs | 1.33 | 220.31 KB | 0.53 |
62-
| | | | | | |
63-
| **StringBuilder** | **1000** | **701.28 μs** | **1.00** | **3935.53 KB** | **1.00** |
64-
| StringBuilderArray | 1000 | 587.01 μs | 0.89 | 1978.13 KB | 0.50 |
65-
| | | | | | |
66-
| **StringBuilder** | **2500** | **1,840.94 μs** | **1.00** | **9804.08 KB** | **1.00** |
67-
| StringBuilderArray | 2500 | 1,374.07 μs | 0.75 | 4907.81 KB | 0.50 |
68-
| | | | | | |
69-
| **StringBuilder** | **5000** | **5,041.05 μs** | **1.00** | **19583.76 KB** | **1.00** |
70-
| StringBuilderArray | 5000 | 2,795.59 μs | 0.56 | 9790.95 KB | 0.50 |
71-
| | | | | | |
72-
| **StringBuilder** | **10000** | **9,842.60 μs** | **1.00** | **39162.77 KB** | **1.00** |
73-
| StringBuilderArray | 10000 | 5,271.43 μs | 0.53 | 19556.25 KB | 0.50 |
74-
| | | | | | |
75-
| **StringBuilder** | **100000** | **54,744.65 μs** | **1.00** | **390802.46 KB** | **1.00** |
76-
| StringBuilderArray | 100000 | 20,572.29 μs | 0.38 | 195337.5 KB | 0.50 |
77-
| | | | | | |
78-
| **StringBuilder** | **500000** | **213,324.82 μs** | **1.00** | **1953310.77 KB** | **1.00** |
79-
| StringBuilderArray | 500000 | 105,173.60 μs | 0.49 | 976587.5 KB | 0.50 |
80-
| | | | | | |
81-
| **StringBuilder** | **1071741** | **289,821.51 μs** | **1.00** | **4186664.2 KB** | **1.00** |
82-
| StringBuilderArray | 1071741 | 153,198.15 μs | 0.53 | 2093269.14 KB | 0.50 |
83-
84-
## Reuse instance benchmark
87+
</details>
88+
<br>
89+
<details>
90+
<summary>AppendLine + Clear</summary>
91+
8592
```C#
8693

94+
[IterationSetup]
95+
public void Setup()
96+
{
97+
_str = new string('S', StrLength);
98+
}
99+
87100
[Benchmark(Baseline = true, Description = "StringBuilder")]
88101
public void StringBuilder()
89102
{
@@ -98,8 +111,6 @@ The version of StringBuilder built on an array of strings string[]: uses less me
98111
{
99112
sb.AppendLine(_str);
100113
}
101-
102-
var result = sb.ToString();
103114
}
104115

105116
[Benchmark(Description = "StringBuilderArray")]
@@ -116,46 +127,58 @@ The version of StringBuilder built on an array of strings string[]: uses less me
116127
{
117128
sb.AppendLine(_str);
118129
}
119-
120-
var result = sb.ToString();
121130
}
122131

123132
```
133+
</details>
134+
<br>
135+
<details>
136+
<summary>Insert</summary>
137+
138+
```C#
139+
140+
[IterationSetup]
141+
public void Setup()
142+
{
143+
_str = new string('S', StrLength);
144+
}
145+
146+
[Benchmark(Baseline = true, Description = "StringBuilder")]
147+
public void StringBuilder()
148+
{
149+
var sb = new System.Text.StringBuilder();
150+
for (int i = 0; i < 100; i++)
151+
{
152+
sb.Append(_str);
153+
}
154+
155+
//before 1 str from end
156+
sb.Insert(99 * _str.Length, _str);
124157

125-
| Method | StrLength | Mean | Ratio | Allocated | Alloc Ratio |
126-
|------------------- |---------- |--------------:|------:|--------------:|------------:|
127-
| **StringBuilder** | **5** | **25.98 μs** | **1.00** | **47.01 KB** | **1.00** |
128-
| StringBuilderArray | 5 | 39.27 μs | 1.54 | 55.1 KB | 1.17 |
129-
| | | | | | |
130-
| **StringBuilder** | **7** | **23.70 μs** | **1.00** | **71.7 KB** | **1.00** |
131-
| StringBuilderArray | 7 | 40.51 μs | 1.72 | 59.01 KB | 0.82 |
132-
| | | | | | |
133-
| **StringBuilder** | **10** | **25.20 μs** | **1.00** | **84.59 KB** | **1.00** |
134-
| StringBuilderArray | 10 | 39.08 μs | 1.60 | 64.87 KB | 0.77 |
135-
| | | | | | |
136-
| **StringBuilder** | **50** | **30.39 μs** | **1.00** | **309.51 KB** | **1.00** |
137-
| StringBuilderArray | 50 | 45.60 μs | 1.52 | 142.99 KB | 0.46 |
138-
| | | | | | |
139-
| **StringBuilder** | **100** | **108.48 μs** | **1.00** | **626.33 KB** | **1.00** |
140-
| StringBuilderArray | 100 | 44.93 μs | 0.45 | 240.65 KB | 0.38 |
141-
| | | | | | |
142-
| **StringBuilder** | **1000** | **1,179.51 μs** | **1.00** | **5904.3 KB** | **1.00** |
143-
| StringBuilderArray | 1000 | 570.91 μs | 0.49 | 1998.46 KB | 0.34 |
144-
| | | | | | |
145-
| **StringBuilder** | **2500** | **3,970.17 μs** | **1.00** | **14698.94 KB** | **1.00** |
146-
| StringBuilderArray | 2500 | 1,516.39 μs | 0.38 | 4928.15 KB | 0.34 |
147-
| | | | | | |
148-
| **StringBuilder** | **5000** | **8,286.17 μs** | **1.00** | **29353.62 KB** | **1.00** |
149-
| StringBuilderArray | 5000 | 2,903.21 μs | 0.35 | 9810.96 KB | 0.33 |
150-
| | | | | | |
151-
| **StringBuilder** | **10000** | **13,094.03 μs** | **1.00** | **58702.15 KB** | **1.00** |
152-
| StringBuilderArray | 10000 | 5,196.08 μs | 0.40 | 19576.59 KB | 0.33 |
153-
| | | | | | |
154-
| **StringBuilder** | **100000** | **66,915.82 μs** | **1.00** | **586134.84 KB** | **1.00** |
155-
| StringBuilderArray | 100000 | 20,600.99 μs | 0.31 | 195357.84 KB | 0.33 |
156-
| | | | | | |
157-
| **StringBuilder** | **500000** | **284,550.02 μs** | **1.00** | **2930037.34 KB** | **1.00** |
158-
| StringBuilderArray | 500000 | 105,025.78 μs | 0.37 | 976607.84 KB | 0.33 |
159-
| | | | | | |
160-
| **StringBuilder** | **1071741** | **370,070.86 μs** | **1.00** | **6280013.72 KB** | **1.00** |
161-
| StringBuilderArray | 1071741 | 153,051.83 μs | 0.41 | 2093289.48 KB | 0.33 |
158+
//in start
159+
sb.Insert(0, _str);
160+
161+
//after 5 str from start
162+
sb.Insert(5 * _str.Length, _str);
163+
}
164+
165+
[Benchmark(Description = "StringBuilderArray")]
166+
public void StringBuilderArray()
167+
{
168+
var sb = new StringBuilderArray.StringBuilderArray();
169+
for (int i = 0; i < 100; i++)
170+
{
171+
sb.Append(_str);
172+
}
173+
174+
sb.Insert(0, _str);
175+
176+
//in start
177+
sb.Insert(100, _str);
178+
179+
//after 5 str from start
180+
sb.Insert(96, _str);
181+
}
182+
183+
```
184+
</details>

0 commit comments

Comments
 (0)