This PR reduces allocations of ReadString() method by making use of Span based APIs.
BenchmarkDotNet also shows allocation/perf improvements.
Method
StringLength
Ratio
Alloc Ratio
Existing
256
1.00
1.00
Optimized
256
0.87
0.69
Existing
512
1.00
1.00
Optimized
512
0.87
0.68
Existing
1024
1.00
1.00
Optimized
1024
0.93
0.67
Existing
2048
1.00
1.00
Optimized
2048
0.85
0.67
Existing
4096
1.00
1.00
Optimized
4096
0.82
0.67
Benchmark used
[MemoryDiagnoser(displayGenColumns: false)]
[HideColumns("Mean", "Median", "Error", "StdDev", "RatioSD", "Allocated")]
public class ReaderBenchmarksString
{
[Params(256, 512, 1024, 2048, 4096)]
public int StringLength { get; set; }
private byte[] _bytes;
[GlobalSetup]
public void Setup()
{
var ms = new MemoryStream();
var writer = new Writer(ms);
writer.WriteString(new string('x', StringLength));
_bytes = ms.ToArray();
}
[Benchmark(Baseline = true)]
public string Existing()
{
var reader = new Reader(new MemoryStream(_bytes));
return reader.ReadString();
}
[Benchmark]
public string Optimized()
{
var reader = new Reader(new MemoryStream(_bytes));
return reader.ReadStringOptimized();
}
}
This PR reduces allocations of
ReadString()
method by making use of Span based APIs.BenchmarkDotNet
also shows allocation/perf improvements.Benchmark used