Optimize WeakDelegateReference by introducing TargetEquals, which tak… #1793
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.
…es 60% less time than comparing with Target if it's still alive, and makes WeakDelegateManager.RemoveListener take 90% less time in normal usage.
### Description of Change ###
In our application, we saw a lot of time being spent inside WeakDelegateManager.RemoveListener when injecting a view with many subviews (around 100 in total). This was due to WeakDelegateManager creating temporary Delegates for each DelegateReference in the list just to do comparisions. By introducing TargetEquals method, you can now test equality without actually using. Testing the fix locally showed that time spent in WeakDelegateManager.RemoveListener got reduced with 90% and made our view injection almost 3 seconds faster!
Bugs Fixed
#1796
API Changes
List all API changes here (or just put None), example:
Added:
Behavioral Changes
None
PR Checklist