Ao comparar o desempenho de ligações fluentes às expressões de ligação suíça/tibete em MVVMcross, vários fatores entram em jogo. Aqui está um colapso detalhado:
Visão geral dos tipos de ligação
- Ligantes fluentes: são expressões de ligação à segura do tipo criadas no código C#. Eles são particularmente úteis em plataformas como iOS e UWP, onde os arquivos de layout XML não são facilmente editáveis. As ligações fluentes fornecem uma maneira clara e fortemente tipada de vincular propriedades de visualização para visualizar as propriedades do modelo, o que pode ajudar a reduzir os erros de tempo de execução, capturando incompatibilidades de tipo no tempo de compilação [1] [4].
- Expressões de ligação ao Swiss/Tibet: São expressões de ligação baseadas em cordas normalmente usadas em arquivos de layout XML (por exemplo, AXML do Android). As ligações suíças são mais flexíveis e permitem expressões complexas como concatenação e lógica condicional. A ligação do Tibete a estende, apoiando a sintaxe mais avançada semelhante a uma mini-linguagem para expressões de ligação [1] [6].
comparação de desempenho
Avaliação de tempo de compilação vs. tempo de execução
- ligações fluentes: como as ligações fluentes são definidas em C#, elas são avaliadas em tempo de compilação. Isso significa que quaisquer erros de tipo ou problemas de ligação são capturados mais cedo, potencialmente melhorando a eficiência do desenvolvimento. No entanto, o desempenho real no tempo de execução é geralmente semelhante a outros métodos de ligação porque a configuração de ligação ainda é executada em tempo de execução.
- Cindagens suíças/tibet: Essas ligações são avaliadas em tempo de execução porque são definidas como strings nos arquivos XML. Isso significa que quaisquer erros nas expressões de ligação são descobertos apenas quando o aplicativo é executado, o que pode levar a ciclos de desenvolvimento mais lentos se não forem testados adequadamente. No entanto, a avaliação de tempo de execução não os torna inerentemente mais lentos que as ligações fluentes, uma vez que as ligações são configuradas.
Overhead de tempo de execução
- ligações fluentes: a sobrecarga das ligações fluentes é mínima porque elas criam diretamente os objetos de ligação necessários no código. Essa abordagem direta pode ser um pouco mais eficiente do que analisar expressões de string em tempo de execução.
- ligações suíças/tibetas: elas exigem analisar as expressões de ligação do XML em tempo de execução, o que introduz algumas despesas gerais em comparação com ligações fluentes. No entanto, essa sobrecarga é tipicamente pequena, a menos que lide com ligações muito complexas ou numerosas.
Eficiência de desenvolvimento e manuseio de erros
- Ligações fluentes: Forneça melhor eficiência de desenvolvimento devido a verificações de tempo de compilação, que podem melhorar indiretamente o desempenho, reduzindo o tempo gasto em depuração de problemas de ligação ao tempo de execução.
- Cindagens suíças/tibet: Embora mais flexíveis para expressões complexas, elas exigem mais verificações de tempo de execução e podem levar a um desenvolvimento mais lento se não for testado corretamente.
Conclusão
Em termos de desempenho bruto, as ligações fluentes e suíças/tibetas geralmente são comparáveis uma vez configuradas. No entanto, as ligações fluentes oferecem vantagens na eficiência do desenvolvimento e na detecção de erros em tempo de compilação, o que pode melhorar indiretamente o desempenho geral do aplicativo, reduzindo o tempo de depuração. As ligações suíças/tibet fornecem mais flexibilidade em cenários complexos, mas requerem mais verificações de tempo de execução. A escolha entre eles geralmente depende das necessidades específicas do projeto e da preferência do desenvolvedor por definições de ligação baseadas em código versus XML.
Citações:[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/480666268/xamarin-mvmcross-fluent-binding-on-uwp
[11] https://crosscuttingconcern.com/mvvmcross-fluent-databinding