Порівнюючи продуктивність вільних зв'язків із експресіями зв'язування швейцарського/тибету в MVVMcross, вступають у кілька факторів. Ось детальний розбивка:
Огляд типів прив'язки
- Вільні зв'язки: це експресії зв'язування, що сприяють типі, створені в коді C#. Вони особливо корисні на платформах, таких як iOS та UWP, де файли макета XML не можна легко редагувати. Вільні зв'язки забезпечують чіткий, сильно типний спосіб зв'язати властивості перегляду для перегляду властивостей моделі, що може допомогти зменшити помилки виконання, сплавляючи невідповідності типу під час компіляції [1] [4].
- Швейцарські/тибетні експресії зв'язування: це виразні виразки на основі рядків, які зазвичай використовуються у файлах макетів XML (наприклад, AXML AxML Android). Швейцарські прив’язки є більш гнучкими і дозволяють створити складні вирази, такі як об'єднання та умовна логіка. Зв'язування тибету розширює це, підтримуючи більш вдосконалений синтаксис, аналогічний міні-мові для зв'язування виразів [1] [6].
Порівняння продуктивності
КОМПЛЕЦІЙНА ТА РАЗУМА РЕЗУЛЬТАТИ
- Вільне зв'язування: Оскільки вільні зв'язування визначаються в C#, вони оцінюються під час компіляції. Це означає, що будь -які помилки типу або проблеми з прив'язкою спіймані рано, потенційно підвищуючи ефективність розвитку. Однак фактична продуктивність під час виконання, як правило, схожа на інші методи зв'язування, оскільки налаштування прив'язки все ще виконується під час виконання.
- Швейцарські/тибетні прив’язки: ці прив'язки оцінюються під час виконання, оскільки вони визначаються як рядки у файлах XML. Це означає, що будь -які помилки в зв'язуванні виразів виявляються лише тоді, коли додаток працює, що може призвести до повільніших циклів розвитку, якщо не належним чином перевіряти. Однак оцінка виконання не по суті робить їх повільнішими, ніж вільні зв'язки після встановлення зв'язків.
Виконання
- Вільні зв'язки: накладні вільні зв'язування мінімальні, оскільки вони безпосередньо створюють необхідні об'єкти зв'язування в коді. Цей прямий підхід може бути дещо ефективнішим, ніж розбір виразів рядків під час виконання.
- Швейцарські/тибетні зв'язки: для них потрібно розбирати виразні вирази від XML під час виконання, що вводить деякі накладні витрати порівняно з вільними зв'язуваннями. Однак ця накладна, як правило, невелика, якщо не маєте справу з дуже складними або численними прив'язками.
Ефективність розвитку та обробка помилок
- Вільні зв'язки: забезпечуйте кращу ефективність розвитку завдяки перевірок компіляції часу, що може опосередковано підвищити продуктивність за рахунок скорочення часу, витраченого на налагодження проблем з прив'язкою часу.
- Швейцарські/тибетні прив’язки: Хоча більш гнучкі для складних виразів, вони потребують більшої кількості перевірок виконання і можуть призвести до повільнішого розвитку, якщо не правильно перевірити.
Висновок
З точки зору сировини, як вільні, так і швейцарські/тибетні зв'язки, як правило, порівнянні після встановлення. Однак вільні прив’язки пропонують переваги в ефективності розвитку та виявлення помилок у часі, що може опосередковано покращити загальну продуктивність додатків за рахунок скорочення часу налагодження. Швейцарські/тибетні прив’язки забезпечують більшу гнучкість у складних сценаріях, але потребують більшої кількості перевірок часу виконання. Вибір між ними часто залежить від конкретних потреб проекту та переваги розробника щодо визначення зв'язування на основі коду проти XML.
Цитати:[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-binding
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-itself
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://www.youtube.com/watch?v=3-tct97sbmxm
[6] https://stackoverflow.com/questions/48824612
[7] https://github.com/mvvmcross/mvvmcross/issues/1342
[8] https://github.com/mvvmcross/mvvmcross
[9] https://www.mvvmcross.com/documentation/fundamentals/value-converters
[10] https://stackoverflow.com/questions/48066268/xamarin-mvvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcerns.com/mvvmcross-fluent-databinding