Collect the resulting string without allocating memory.
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 |
Ratio |
Allocated |
Alloc Ratio |
| StringBuilderArray |
.NET 10.0 |
.NET 10.0 |
1071741 |
289,587.367 μs |
1.00 |
2093248.07 KB |
1.00 |
| StringBuilder |
.NET 10.0 |
.NET 10.0 |
1071741 |
318,024.700 μs |
1.10 |
2093248.07 KB |
1.00 |
|
|
|
|
|
|
|
|
| StringBuilderArray |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
292,666.936 μs |
1.00 |
2093248.07 KB |
1.00 |
| StringBuilder |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
320,468.233 μs |
1.10 |
2093248.07 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);
}
}
| Method |
Job |
Runtime |
StrLength |
Mean |
Ratio |
Allocated |
Alloc Ratio |
| StringBuilderArray |
.NET 10.0 |
.NET 10.0 |
1071741 |
29.945 μs |
1.03 |
20.48 KB |
1.00 |
| StringBuilder |
.NET 10.0 |
.NET 10.0 |
1071741 |
123,382.045 μs |
4,229.27 |
2093438.98 KB |
102,196.87 |
| DefaultInterpolatedStringHandler |
.NET 10.0 |
.NET 10.0 |
1071741 |
231,279.579 μs |
7,927.77 |
2097152.02 KB |
102,378.13 |
|
|
|
|
|
|
|
|
| StringBuilderArray |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
6.277 μs |
1.02 |
20.48 KB |
1.00 |
| StringBuilder |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
126,442.383 μs |
20,631.07 |
2093440.23 KB |
102,196.93 |
| DefaultInterpolatedStringHandler |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
227,531.679 μs |
37,125.38 |
2097152.4 KB |
102,378.15 |
|
|
|
|
|
|
|
|
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.Clear();
for (int i = 0; i < 1000; i++)
{
sb.AppendLiteral(_str);
}
}
| Method |
Job |
Runtime |
StrLength |
Mean |
Ratio |
Allocated |
Alloc Ratio |
| StringBuilderArray |
.NET 10.0 |
.NET 10.0 |
1071741 |
39.325 μs |
1.03 |
40.82 KB |
1.00 |
| StringBuilder |
.NET 10.0 |
.NET 10.0 |
1071741 |
233,685.746 μs |
6,141.00 |
4186788.48 KB |
102,566.30 |
| DefaultInterpolatedStringHandler |
.NET 10.0 |
.NET 10.0 |
1071741 |
466,345.020 μs |
12,255.03 |
2097152.02 KB |
51,375.21 |
|
|
|
|
|
|
|
|
| StringBuilderArray |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
10.092 μs |
1.01 |
40.87 KB |
1.00 |
| StringBuilder |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
240,078.979 μs |
23,996.71 |
4186789.73 KB |
102,448.69 |
| DefaultInterpolatedStringHandler |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
455,444.213 μs |
45,523.19 |
2097152.02 KB |
51,316.28 |
|
|
|
|
|
|
|
|
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.Insert(0, _str);
//in start
sb.Insert(100, _str);
//after 5 str from start
sb.Insert(96, _str);
}
[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 |
Ratio |
Allocated |
Alloc Ratio |
| StringBuilderArray |
.NET 10.0 |
.NET 10.0 |
1071741 |
5.069 μs |
1.02 |
1.45 KB |
1.00 |
| StringBuilder |
.NET 10.0 |
.NET 10.0 |
1071741 |
14,424.515 μs |
2,909.17 |
215628.59 KB |
148,389.57 |
|
|
|
|
|
|
|
|
| StringBuilderArray |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
2.073 μs |
1.01 |
1.45 KB |
1.00 |
| StringBuilder |
NativeAOT 10.0 |
NativeAOT 10.0 |
1071741 |
13,324.245 μs |
6,492.04 |
215629.18 KB |
148,389.97 |
|
|
|
|
|
|
|
|