xamarin / Xamarin.Forms

Xamarin.Forms is no longer supported. Migrate your apps to .NET MAUI.
https://aka.ms/xamarin-upgrade
Other
5.63k stars 1.87k forks source link

fix: #13429 #15626

Closed anton-yashin closed 11 months ago

anton-yashin commented 1 year ago

Description of Change

Because Xamarin.iOS uses a reflection to provide arguments in callbacks as decribed here. This PR provides a custom NSIndexPath wrapper to avoid reflection calling in ItemsViewDelegator.GetSizeForItem. Performance boost is 12x on Simulator or 17x on iPhone.

Issues Resolved

API Changes

Added:

Changed:

Platforms Affected

Behavioral/Visual Changes

None

Before/After Screenshots

Not applicable

Testing Procedure

Test page for control gallery Issue13429 is provided, UITest included. You may able to run this test from VS. Because this is performance issue you may want to place some different timing depending on your hardware. Current timings is applicable for iPhone 11 and mac mini 2018 i5/16GB. See EXPECTED_TIMEOUT constant at Issue13429 test page. If you want to run this test through control gallery, then launch test, then tap "Add", "Remove" or "Replace" button. Test will show you how much time is taken by operation in milliseconds.

PR Checklist

anton-yashin commented 1 year ago

@microsoft-github-policy-service agree

jfversluis commented 1 year ago

/azp run

azure-pipelines[bot] commented 1 year ago
Azure Pipelines successfully started running 1 pipeline(s).
jfversluis commented 1 year ago

Verified that it builds here: https://dev.azure.com/xamarin/public/_build/results?buildId=76544&view=results

jfversluis commented 11 months ago

Hey @anton-yashin thank you so much for this. I would LOVE to take this, but unfortunately at this point in the Xamarin.Forms lifecycle that's not possible because it adds new APIs and that's not something we still want to do.

I know it's been a while, but if you're interested, please have a look at .NET MAUI and see if this is the case there also as well, we would love to get these benefits there. Thank you again so much for your efforts. It's really appreciated!