Skip to content

Commit 442ca66

Browse files
committed
Update some benchmarks
1 parent 5a7248a commit 442ca66

File tree

2 files changed

+30
-24
lines changed

2 files changed

+30
-24
lines changed

README.md

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -53,29 +53,28 @@ More detailed documentation can be found [here](https://linkdotnet.github.io/Str
5353
The following table compares the built-in `StringBuilder` and this library's `ValueStringBuilder`:
5454

5555
```no-class
56-
BenchmarkDotNet=v0.13.2, OS=macOS Monterey 12.6.1 (21G217) [Darwin 21.6.0]
57-
Apple M1 Pro, 1 CPU, 10 logical and 10 physical cores
58-
.NET SDK=7.0.100-rc.2.22477.23
59-
[Host] : .NET 6.0.10 (6.0.1022.47605), Arm64 RyuJIT AdvSIMD
60-
DefaultJob : .NET 6.0.10 (6.0.1022.47605), Arm64 RyuJIT AdvSIMD
61-
62-
63-
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio |
64-
|------------------------------- |-----------:|---------:|---------:|------:|--------:|--------:|----------:|------------:|
65-
| DotNetStringBuilder | 227.3 ns | 1.31 ns | 1.22 ns | 1.00 | 0.00 | 0.7114 | 1488 B | 1.00 |
66-
| ValueStringBuilder | 128.7 ns | 0.57 ns | 0.53 ns | 0.57 | 0.00 | 0.2677 | 560 B | 0.38 |
67-
| ValueStringBuilderPreAllocated | 113.9 ns | 0.67 ns | 0.60 ns | 0.50 | 0.00 | 0.2677 | 560 B | 0.38 |
56+
BenchmarkDotNet v0.14.0, macOS Sequoia 15.3.1 (24D70) [Darwin 24.3.0]
57+
Apple M2 Pro, 1 CPU, 12 logical and 12 physical cores
58+
.NET SDK 9.0.200
59+
[Host] : .NET 9.0.2 (9.0.225.6610), Arm64 RyuJIT AdvSIMD
60+
DefaultJob : .NET 9.0.2 (9.0.225.6610), Arm64 RyuJIT AdvSIMD
61+
62+
63+
| Method | Mean | Error | StdDev | Ratio | Gen0 | Allocated | Alloc Ratio |
64+
|-------------------- |----------:|---------:|---------:|------:|-------:|----------:|------------:|
65+
| DotNetStringBuilder | 126.74 ns | 0.714 ns | 0.667 ns | 1.00 | 0.1779 | 1488 B | 1.00 |
66+
| ValueStringBuilder | 95.69 ns | 0.118 ns | 0.110 ns | 0.76 | 0.0669 | 560 B | 0.38 |
6867
```
6968

7069
For more comparisons, check the documentation.
7170

7271
Another benchmark shows that `ValueStringBuilder` allocates less memory when appending value types (such as `int` and `double`):
7372

7473
```no-class
75-
| Method | Mean | Error | StdDev | Gen 0 | Allocated |
76-
|-------------------- |---------:|---------:|---------:|-------:|----------:|
77-
| DotNetStringBuilder | 17.21 us | 0.622 us | 1.805 us | 1.5259 | 6 KB |
78-
| ValueStringBuilder | 16.24 us | 0.496 us | 1.462 us | 0.3357 | 1 KB |
74+
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
75+
|------------------------------- |---------:|--------:|--------:|-------:|-------:|----------:|
76+
| ValueStringBuilderAppendFormat | 821.7 ns | 1.29 ns | 1.14 ns | 0.4330 | - | 3.54 KB |
77+
| StringBuilderAppendFormat | 741.5 ns | 5.58 ns | 5.22 ns | 0.9909 | 0.0057 | 8.1 KB |
7978
```
8079

8180
Check out the [Benchmark](tests/LinkDotNet.StringBuilder.Benchmarks) for a more detailed comparison and setup.

docs/site/articles/comparison.md

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,17 @@ The `StringBuilder` shipped with the .NET Framework itself is a all-purpose stri
2222
The following table gives you a small comparison between the `StringBuilder` which is part of .NET and the `ValueStringBuilder`:
2323

2424
```
25-
| Method | Mean | Error | StdDev | Median | Ratio | RatioSD | Gen 0 | Gen 1 | Allocated |
26-
|-------------------- |-----------:|---------:|----------:|-----------:|------:|--------:|--------:|-------:|----------:|
27-
| DotNetStringBuilder | 401.7 ns | 29.15 ns | 84.56 ns | 373.4 ns | 1.00 | 0.00 | 0.3576 | - | 1,496 B |
28-
| ValueStringBuilder | 252.8 ns | 9.05 ns | 26.27 ns | 249.0 ns | 0.65 | 0.13 | 0.1583 | - | 664 B |
25+
BenchmarkDotNet v0.14.0, macOS Sequoia 15.3.1 (24D70) [Darwin 24.3.0]
26+
Apple M2 Pro, 1 CPU, 12 logical and 12 physical cores
27+
.NET SDK 9.0.200
28+
[Host] : .NET 9.0.2 (9.0.225.6610), Arm64 RyuJIT AdvSIMD
29+
DefaultJob : .NET 9.0.2 (9.0.225.6610), Arm64 RyuJIT AdvSIMD
30+
31+
32+
| Method | Mean | Error | StdDev | Ratio | Gen0 | Allocated | Alloc Ratio |
33+
|-------------------- |----------:|---------:|---------:|------:|-------:|----------:|------------:|
34+
| DotNetStringBuilder | 126.74 ns | 0.714 ns | 0.667 ns | 1.00 | 0.1779 | 1488 B | 1.00 |
35+
| ValueStringBuilder | 95.69 ns | 0.118 ns | 0.110 ns | 0.76 | 0.0669 | 560 B | 0.38 |
2936
```
3037

3138
For more comparison check the documentation.
@@ -34,10 +41,10 @@ Another benchmark shows that this `ValueStringBuilder` uses less memory when it
3441

3542

3643
```
37-
| Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Allocated |
38-
|-------------------- |---------:|---------:|---------:|--------:|-------:|----------:|
39-
| DotNetStringBuilder | 16.31 us | 0.414 us | 1.208 us | 1.5259 | - | 6 KB |
40-
| ValueStringBuilder | 14.61 us | 0.292 us | 0.480 us | 0.3357 | - | 1 KB |
44+
| Method | Mean | Error | StdDev | Gen0 | Gen1 | Allocated |
45+
|------------------------------- |---------:|--------:|--------:|-------:|-------:|----------:|
46+
| ValueStringBuilderAppendFormat | 821.7 ns | 1.29 ns | 1.14 ns | 0.4330 | - | 3.54 KB |
47+
| StringBuilderAppendFormat | 741.5 ns | 5.58 ns | 5.22 ns | 0.9909 | 0.0057 | 8.1 KB |
4148
4249
```
4350

0 commit comments

Comments
 (0)