Avoid boxing in UniqueEventHelper #6510
Merged
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
Use a Dictionary instead of Hashtable in UniqueEventHelper in order to avoid boxing the ref count integer on every add/remove. And as long as this was being updated, addressed the TODO to combine the identical types into a helper base type that provided most of the functionality shared instead of being duplicated on both the generic and non-generic handler implementation. Also reduced the allocation in InvokeEvents, just allocating an array for the handlers rather than allocating a complete copy of the dictionary, a keys object, and an enumerator object. And avoid forcing the delegates dictionary into existence just to remove a delegate.
Customer Impact
Unnecessary allocation
Regression
No
Testing
CI
Risk
Minimal
Microsoft Reviewers: Open in CodeFlow