Reduce ThicknessConverter allocs to minimum and improve conversion performance #9363
+61
−65
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Simplifies code in
CanConvertTo
/ConvertFrom
/ConvertTo
, removes additional type casts by usingis
checks/pattern match. Commits should be easy to review.Uses
DefaultInterpolatedStringHandler
instead ofStringBuilder
to handle conversion inToString
with a pre-allocated on-stack buffer (not using interpolated strings directly due to theNaN
->Auto
conversion which would box as Roslyn won't handle that one.Also stackallocs 4 doubles instead of allocating an array in
FromString
, this uses unsafe quotation due to how the current code-gen with Span looks like; additional perf improvement. I didn't include benchmark/tests in this one, they're together in the other PR forLengthConverter
#9364.Multiple decimals point (edge case but within original range)
Single decimal point, standard use-case
Conversion from
double.NaN
toAuto
Customer Impact
Improved performance, greatly decreased allocations.
Regression
No.
Testing
Local build, basic set of assert testing.
Risk
Low.
Microsoft Reviewers: Open in CodeFlow