Avoid boxing booleans and allocations in UncommonField<bool> #10681
+37
−43
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.
Fixes #10677
Fixes #4114
Description
Even though
UncommonField
itself is generic, the underlying value storage (EffectiveValues) is not, therefore values saved in uncommon field end up being boxed same wayDependencyProperty
values are.A common case is storing a
boolean
(mostlytrue
), which we can easily special-case using ourBooleanBoxes
.While I could fix
Unset
values for value types, this wasn't originally done so that would be a behavioral change (though it would probably help in some cases to free up some memory).Customer Impact
See #10677 for impact of this change.
Regression
Depends how you look at it, given the history. But it was boxing in the original, so I guess not.
Testing
Local build, verifying functionality accross different scenarios (
GridView
,HiearchicalVirtualization
viaTreeView
/VirtualizingStackPanel
, etc.)Risk
Low, this just adds a generic path for
bool
that is otherwise eliminated.Microsoft Reviewers: Open in CodeFlow