När man jämför prestanda för flytande bindningar med schweiziska/tibetbindande uttryck i MVVMCross, spelar flera faktorer. Här är en detaljerad uppdelning:
Översikt över bindande typer
- Flytande bindningar: Dessa är typsäkra bindande uttryck skapade i C# -kod. De är särskilt användbara på plattformar som iOS och UWP där XML -layoutfiler inte är lätt redigerbara. Flytande bindningar ger ett tydligt, starkt typiskt sätt att binda visningsegenskaper för att se modellegenskaper, vilket kan bidra till att minska runtime-fel genom att fånga typ missförhållanden vid kompileringstid [1] [4].
- Swiss/Tibet-bindande uttryck: Dessa är strängbaserade bindningsuttryck som vanligtvis används i XML-layoutfiler (t.ex. Androids AXML). Schweiziska bindningar är mer flexibla och möjliggör komplexa uttryck som sammankoppling och villkorad logik. Tibet-bindning utvidgar detta genom att stödja mer avancerad syntax som liknar en minilanguage för bindande uttryck [1] [6].
Performansjämförelse
Compile-Time vs. Runtime Evaluation
- Flytande bindningar: Eftersom flytande bindningar definieras i C#utvärderas de vid kompileringstid. Detta innebär att alla typfel eller bindande problem fångas tidigt, vilket potentiellt kan förbättra utvecklingseffektiviteten. Den faktiska prestanda vid körning liknar emellertid i allmänhet andra bindningsmetoder eftersom bindningsuppsättningen fortfarande körs vid körning.
- Swiss/Tibet Bindings: Dessa bindningar utvärderas vid körning eftersom de definieras som strängar i XML -filer. Detta innebär att eventuella fel i bindningsuttryck endast upptäcks när appen körs, vilket kan leda till långsammare utvecklingscykler om de inte testas korrekt. Runtime -utvärderingen gör dem emellertid inte i sig långsammare än flytande bindningar när bindningarna har ställts in.
Runtime Overhead
- Flytande bindningar: Kostnaden för flytande bindningar är minimal eftersom de direkt skapar de nödvändiga bindande objekten i kod. Denna direkta tillvägagångssätt kan vara något effektivare än att analysera stränguttryck vid körning.
- Swiss/Tibet -bindningar: Dessa kräver att de bindande uttrycksuttryck från XML vid körning, vilket introducerar en del omkostnader jämfört med flytande bindningar. Emellertid är denna omkostnad vanligtvis liten såvida inte hanterar mycket komplexa eller många bindningar.
Utvecklingseffektivitet och felhantering
- Flytande bindningar: Ge bättre utvecklingseffektivitet på grund av kompileringstidskontroller, vilket indirekt kan förbättra prestandan genom att minska den tid som spenderas felsökning av runtime-bindningsproblem.
- Swiss/Tibet -bindningar: Även om de är mer flexibla för komplexa uttryck kräver de mer runtime -kontroller och kan leda till långsammare utveckling om det inte testas korrekt.
Slutsats
När det gäller råprestanda är både flytande och schweiziska/Tibet bindningar i allmänhet jämförbara när de har ställts in. Emellertid erbjuder flytande bindningar fördelar inom utvecklingseffektivitet och kompileringstidsfeldetektering, vilket indirekt kan förbättra den totala applikationsprestanda genom att minska felsökningstiden. Swiss/Tibet -bindningar ger mer flexibilitet i komplexa scenarier men kräver mer runtime -kontroller. Valet mellan dem beror ofta på projektets specifika behov och utvecklarens preferens för kodbaserad kontra XML-baserade bindningsdefinitioner.
Citeringar:[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-tselfself
[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