Optimize DependencyProperty lookup/registration performance, remove allocs #9551
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
Optimizes name lookup of
DependencyProperty, this way all name-lookups are allocation free as the key is nowstructand is created on stack everytime. Since name is looked up when registering property as well, this optimizes that case too.Hashtableis replaced withDictionary<FromNameKey, DependencyProperty>, offering perf benefits.FromNameKeyis nowstructinstead ofclass, which removes any heap/gen0 allocations on lookups.Synchronizedfield for locking is nowSystem.Threading.Lockinstead ofobject(slight perf improvement).structnow, the memory footprint of the whole collection will be lower.No locking
With locking (
object/Lock)Benchmark code
Benchmark code (without types)
Customer Impact
Given how heavily
DependencyPropertyis used, this is a decent (often times more than 50%) perf speed improvement, and also the overall memory usage is reduced.Regression
No.
Testing
Local build, sample app run.
Risk
Low, the swap is safe.
Microsoft Reviewers: Open in CodeFlow