Harley Holt
be19d9aae6
fix: Optimizes Point2D by implementing ISpanFormattable ( #1203 )
...
Point2D implements a basic TryFormat function. Only a single format is supported: "(X, Y)" where X and Y are base 10 integers.
Uses recent improvements in string interpolation to write the characters to the destination without first allocating memory for boxed arguments or intermediate strings.
This is a partial solution to issue #1067 . A similar solution well be implemented in other classes in Geometry if it looks promising.
Benchmarks
---
d6f8dabf3c/Program.cs
Before change:
```
BenchmarkDotNet=v0.13.2, OS=ubuntu 22.04
Intel Core i7-9700K CPU 3.60GHz (Coffee Lake), 1 CPU, 8 logical and 8 physical cores
.NET SDK=6.0.402
[Host] : .NET 6.0.10 (6.0.1022.47605), X64 RyuJIT AVX2
DefaultJob : .NET 6.0.10 (6.0.1022.47605), X64 RyuJIT AVX2
| Method | Mean | Error | StdDev | Gen0 | Allocated |
|--------------------------------- |----------:|---------:|---------:|-------:|----------:|
| CallToString | 44.27 ns | 0.068 ns | 0.063 ns | 0.0063 | 40 B |
| InterpolatedString | 110.64 ns | 0.316 ns | 0.295 ns | 0.0126 | 80 B |
| InterpolatedStringMultiplePoints | 211.36 ns | 0.349 ns | 0.326 ns | 0.0293 | 184 B |
```
After change:
```
BenchmarkDotNet=v0.13.2, OS=ubuntu 22.04
Intel Core i7-9700K CPU 3.60GHz (Coffee Lake), 1 CPU, 8 logical and 8 physical cores
.NET SDK=6.0.402
[Host] : .NET 6.0.10 (6.0.1022.47605), X64 RyuJIT AVX2
DefaultJob : .NET 6.0.10 (6.0.1022.47605), X64 RyuJIT AVX2
| Method | Mean | Error | StdDev | Gen0 | Allocated |
|--------------------------------- |----------:|---------:|---------:|-------:|----------:|
| CallToString | 55.13 ns | 0.826 ns | 0.772 ns | 0.0063 | 40 B |
| InterpolatedString | 55.73 ns | 0.954 ns | 0.892 ns | 0.0063 | 40 B |
| InterpolatedStringMultiplePoints | 105.42 ns | 0.151 ns | 0.134 ns | 0.0101 | 64 B |
```
2022-10-25 12:08:35 -07:00