Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Hvordan sammenlignes ydelsen af ​​flydende bindinger med schweiziske/tibetbindende udtryk i mvvmcross


Hvordan sammenlignes ydelsen af ​​flydende bindinger med schweiziske/tibetbindende udtryk i mvvmcross


Når man sammenligner ydelsen af ​​flydende bindinger med schweiziske/tibetbindende udtryk i MVVMCROSS, kommer flere faktorer i spil. Her er en detaljeret sammenbrud:

Oversigt over bindingstyper

- Fluentbindinger: Dette er typesikre bindingsudtryk oprettet i C# -kode. De er især nyttige på platforme som iOS og UWP, hvor XML -layoutfiler ikke let kan redigeres. Fluentbindinger giver en klar, stærkt typisk måde at binde visningsegenskaber for at se modelegenskaber, hvilket kan hjælpe med at reducere runtime-fejl ved at fange type misforhold på kompileringstidspunktet [1] [4].

- Swiss/Tibet-bindende udtryk: Dette er strengbaserede bindingsudtryk, der typisk bruges i XML-layoutfiler (f.eks. Android's AXML). Schweiziske bindinger er mere fleksible og giver mulighed for komplekse udtryk som sammenkædning og betinget logik. Tibet-binding udvider dette ved at understøtte mere avanceret syntaks, der ligner et mini-sprog til bindingsudtryk [1] [6].

Performance -sammenligning

Compile-time vs. runtime-evaluering

- Fluentbindinger: Da flydende bindinger er defineret i C#, evalueres de ved kompileringstid. Dette betyder, at enhver type fejl eller bindende problemer fanges tidligt, hvilket potentielt forbedrer udviklingseffektiviteten. Imidlertid ligner den faktiske ydelse ved runtime generelt andre bindingsmetoder, fordi bindingsopsætningen stadig udføres ved kørsel.

- Swiss/Tibet -bindinger: Disse bindinger evalueres ved kørsel, fordi de er defineret som strenge i XML -filer. Dette betyder, at eventuelle fejl i de bindende udtryk opdages kun, når appen kører, hvilket kan føre til langsommere udviklingscyklusser, hvis de ikke testes korrekt. Imidlertid gør runtime -evalueringen ikke i sagens natur dem langsommere end flydende bindinger, når bindingerne er indstillet.

Runtime overhead

- Flydende bindinger: Overhead af flydende bindinger er minimal, fordi de direkte opretter de nødvendige bindingsobjekter i kode. Denne direkte tilgang kan være lidt mere effektiv end at analysere strengudtryk ved kørsel.

- Swiss/Tibet -bindinger: Disse kræver parsing af bindingsudtryk fra XML ved runtime, som introducerer nogle overhead sammenlignet med flydende bindinger. Imidlertid er denne overhead typisk lille, medmindre det er meget komplekst eller adskillige bindinger.

Udviklingseffektivitet og fejlhåndtering

- Fluentbindinger: Giv bedre udviklingseffektivitet på grund af kompileringstidskontrol, som indirekte kan forbedre ydelsen ved at reducere de tidsforbrugte fejlbindingsproblemer.

- Swiss/Tibet -bindinger: Selvom de er mere fleksible for komplekse udtryk, kræver de mere runtime -kontrol og kan føre til langsommere udvikling, hvis ikke korrekt testet.

Konklusion

Med hensyn til rå ydeevne er både flydende og schweiziske/Tibet -bindinger generelt sammenlignelige, når de først er opsat. Imidlertid giver flydende bindinger fordele ved udviklingseffektivitet og kompileringstidsfejldetektion, som indirekte kan forbedre den samlede applikationsydelse ved at reducere debugging-tid. Swiss/Tibet -bindinger giver mere fleksibilitet i komplekse scenarier, men kræver mere runtime -kontrol. Valget mellem dem afhænger ofte af projektets specifikke behov og udviklerens præference for kodebaseret kontra XML-baserede bindingsdefinitioner.

Citater:
[1] https://blog.ostebaronen.dk/2018/01/mvvmcross-binding-target.html
[2] https://stackoverflow.com/questions/46522577/mvvmcross-issues-with-fluent-bindende
)
[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-bindende-on-uwp
[11] https://crosscuttingconcerns.com/mvvmcross-fluent-databinding