При сравнении производительности привязки Fluent с Swiss/Tibet Sinving Expressions в MVVMcross вступают в игру несколько факторов. Вот подробный срыв:
Обзор типов привязки
- Плавные привязки: это экспрессия для привязки, созданные типами, созданные в коде C#. Они особенно полезны на платформах, таких как iOS и UWP, где файлы макета XML не легко редактируются. Переключатели свободы обеспечивают четкий, сильно типичный способ связывания видов для просмотра свойств модели, которые могут помочь уменьшить ошибки времени выполнения, поймав несоответствия типов во время компиляции [1] [4].
- Швейцарские/тибевые привязки. Швейцарские привязки являются более гибкими и позволяют создавать сложные выражения, такие как конкатенация и условная логика. Связывание тибета расширяет это, поддерживая более продвинутый синтаксис, аналогичный мини-языке для выражений связывания [1] [6].
Сравнение производительности
Оценка времени компиляции против выполнения
- Плавные связки: поскольку связывания бегства определяются в C#, они оцениваются во время компиляции. Это означает, что любые ошибки типа или проблемы с связыванием ловят рано, что потенциально повышает эффективность развития. Тем не менее, фактическая производительность во время выполнения, как правило, аналогична другим методам привязки, поскольку настройка привязки все еще выполняется во время выполнения.
- Привязки Swiss/Tibet: эти привязки оцениваются во время выполнения, поскольку они определяются как строки в файлах XML. Это означает, что любые ошибки в привязывающих выражениях обнаруживаются только при запуске приложения, что может привести к более медленным циклам разработки, если не будет должным образом проверено. Тем не менее, оценка времени выполнения по своей сути не делает их медленными, чем привязки к бегству после установки привязки.
Над головой
- Плавные привязки: накладные расходы на беглые привязки минимальны, поскольку они напрямую создают необходимые объекты связывания в коде. Этот прямой подход может быть немного более эффективным, чем выражения строки в среде выполнения.
- Привязки швейцарского/тибета: они требуют анализа экспрессии связывания из XML во время выполнения, что вводит некоторые накладные расходы по сравнению с привязками бегства. Тем не менее, этот накладчик обычно невелик, если не иметь дело с очень сложными или многочисленными привязками.
эффективность разработки и обработка ошибок
- Fluent Bindings: обеспечить лучшую эффективность разработки из-за проверки времени компиляции, что может косвенно повысить производительность за счет сокращения времени, затрачиваемого на отладку проблем с привязкой времени выполнения.
- Швейцарские/тибевые привязки: хотя и более гибкие для сложных выражений, они требуют большей проверки времени выполнения и могут привести к более медленной разработке, если не правильно протестированы.
Заключение
С точки зрения необработанной производительности, как Fluent, так и Swiss/Tibet -привязки, как правило, сопоставимы после настройки. Тем не менее, Fluent Bindings предлагает преимущества в эффективности разработки и обнаружения ошибок времени компиляции, что может косвенно повысить общую производительность применения за счет сокращения времени отладки. Швейцарские/тибевые привязки обеспечивают большую гибкость в сложных сценариях, но требуют большей проверки времени выполнения. Выбор между ними часто зависит от конкретных потребностей проекта и предпочтения разработчика для определений привязки на основе кода и XML.
Цитаты:[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-связывание
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet-binding-to-viewmodel-it
[4] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[5] https://www.youtube.com/watch?v=3-ct97sbmxm
[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