Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon W jaki sposób wydajność płynnych wiązań porównuje się do ekspresji wiązania szwajcarskiego/tybetu w MVVMcross


W jaki sposób wydajność płynnych wiązań porównuje się do ekspresji wiązania szwajcarskiego/tybetu w MVVMcross


Porównując wydajność płynnych wiązań z ekspresją szwajcarskich/tybetu w MVVMcross, wchodzi kilka czynników. Oto szczegółowy podział:

Przegląd typów wiązania

- Płynne wiązania: Są to bezpieczne wyrażenia wiązania utworzone w kodzie C#. Są one szczególnie przydatne na platformach takich jak iOS i UWP, w których pliki układu XML nie są łatwo edytowalne. Płynne wiązania stanowią wyraźny, silnie typowy sposób wiązania właściwości widoku w celu wyświetlania właściwości modelu, co może pomóc w zmniejszeniu błędów w czasie wykonywania poprzez złapanie niedopasowań typu w czasie kompilacji [1] [4].

- Wyrażenia wiązania szwajcarskiego/tybetu: są to wyrażenia wiązania oparte na łańcuchach zwykle stosowane w plikach układu XML (np. AXML Androida). Wiązania szwajcarskie są bardziej elastyczne i pozwalają na złożone wyrażenia, takie jak konatenacja i logika warunkowa. Wiązanie Tybetu rozszerza to, obsługując bardziej zaawansowaną składnię podobną do mini języka dla wyrażeń wiązania [1] [6].

Porównanie wydajności

###

- Płynne wiązania: Ponieważ płynne wiązania są zdefiniowane w C#, są one oceniane w czasie kompilacji. Oznacza to, że wszelkie błędy lub problemy wiążące są wcześnie złapane, potencjalnie poprawiając wydajność rozwoju. Jednak faktyczna wydajność w czasie wykonywania jest ogólnie podobna do innych metod wiązania, ponieważ konfiguracja wiązania jest nadal wykonywana w czasie wykonywania.

- Wiązania szwajcarskie/Tybetu: Te powiązania są oceniane w czasie wykonywania, ponieważ są zdefiniowane jako ciągi w plikach XML. Oznacza to, że wszelkie błędy w wyrażeniach wiążących są odkrywane tylko wtedy, gdy aplikacja działa, co może prowadzić do wolniejszych cykli rozwojowych, jeśli nie są odpowiednio przetestowane. Jednak ocena środowiska wykonawczego nie powoduje z natury wolniejszych niż płynne wiązania po skonfigurowaniu wiązań.

czas wykonywania

- Płynne wiązania: Ochody płynnych wiązań jest minimalne, ponieważ bezpośrednio tworzą niezbędne obiekty wiązania w kodzie. To bezpośrednie podejście może być nieco bardziej wydajne niż analizowanie wyrażeń ciągów w czasie wykonywania.

- Wiązania szwajcarskie/tybetu: Wymagają one analizowania wyrażeń wiązania z XML w czasie wykonywania, co wprowadza pewne koszty ogólne w porównaniu z płynnymi wiązaniami. Jednak ten koszt narzutowy jest zwykle niewielki, chyba że zajmuje się bardzo złożonymi lub licznymi wiązaniami.

Wydajność rozwoju i obsługa błędów

- Płynne wiązania: Zapewnij lepszą wydajność rozwoju z powodu kontroli w czasie kompilacji, co może pośrednio poprawić wydajność poprzez skrócenie czasu spędzonego na debugowaniu problemów związanych z wiązaniem czasu wykonywania.

- Wiązania szwajcarskie/tybetu: Chociaż są bardziej elastyczne dla wyrażeń złożonych, wymagają większej liczby kontroli czasu wykonawczego i mogą prowadzić do wolniejszego rozwoju, jeśli nie są odpowiednio przetestowane.

Wniosek

Pod względem wydajności surowej zarówno płynne, jak i szwajcarskie/tybetu są ogólnie porównywalne po skonfigurowaniu. Jednak płynne powiązania oferują zalety w zakresie wydajności rozwoju i wykrywania błędów w czasie kompilacji, które mogą pośrednio poprawić ogólną wydajność zastosowania poprzez skrócenie czasu debugowania. Wiązania szwajcarskie/tybetu zapewniają większą elastyczność w złożonych scenariuszach, ale wymagają większej liczby kontroli czasu wykonawczego. Wybór między nimi często zależy od konkretnych potrzeb projektu i preferencji programisty dotyczące definicji wiązania opartych na kodzie w porównaniu z XML.

Cytaty:
[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-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