[ios] avoid duplicating CALayer.Sublayer arrays
#21308
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.
Context: https://discord.com/channels/732297728826277939/732297808148824115/1219383992067821608
In a customer's application, they saw in Xcode's Instruments:
Reviewing the code, there is a performance problem:
This accesses
CALayer.Sublayerstwice:null check
foreachWhen C# calls into Objective-C here, the returned array is marshaled and copied to a C# array that can be consumed in managed code. We are doing this work twice!
I audited all calls to
CALayer.Sublayersand found that we can avoid this in places that are called frequently.This should improve the performance of all views on iOS or Catalyst. However, I don't have access to the customer's application to test the difference. We can have them try a nightly MAUI build after this is merged.