Fluent BindingsのパフォーマンスをMVVMCrossのスイス/チベットの結合式と比較すると、いくつかの要因が登場します。詳細な内訳は次のとおりです。
##バインディングタイプの概要
-Fluent Bindings:これらは、C#コードで作成されたタイプセーフバインディング式です。これらは、XMLレイアウトファイルが簡単に編集できないiOSやUWPなどのプラットフォームで特に便利です。 Fluent Bindingsは、ビュープロパティをバインドしてモデルプロパティを表示するための明確で強くタイプの方法を提供します。これは、コンパイル時間[1] [4]でタイプの不一致をキャッチすることでランタイムエラーを減らすのに役立ちます。
- スイス/チベットの結合式:これらは、XMLレイアウトファイル(AndroidのAXMLなど)で通常使用される文字列ベースの結合式です。スイスのバインディングはより柔軟であり、連結や条件付き論理などの複雑な表現を可能にします。チベットの結合は、結合式のミニ言語と同様に、より高度な構文をサポートすることにより、これを拡張します[1] [6]。
##パフォーマンスの比較
###コンパイル時間とランタイム評価
-Fluent Bindings:Fluent BindingsはC#で定義されるため、コンパイル時に評価されます。これは、あらゆるタイプのエラーまたは拘束力のある問題が早期にキャッチされ、開発効率が改善される可能性があることを意味します。ただし、バインディングセットアップは実行時に実行されているため、実行時の実際のパフォーマンスは一般に他のバインディング方法と類似しています。
- スイス/チベットのバインディング:これらのバインディングは、XMLファイルの文字列として定義されるため、実行時に評価されます。これは、バインディング式のエラーがアプリが実行されたときにのみ発見されることを意味します。これにより、適切にテストされないと開発サイクルが遅くなります。ただし、ランタイム評価では、バインディングがセットアップされても、流bindingよりも本質的に遅くなりません。
###ランタイムオーバーヘッド
-Fluent Bindings:流bindingのオーバーヘッドは、コード内で必要なバインディングオブジェクトを直接作成するため、最小限です。この直接的なアプローチは、実行時に文字列式を解析するよりもわずかに効率的です。
- スイス/チベットのバインディング:実行時に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-fith-fluentバインディング
[3] https://stackoverflow.com/questions/48422489/mvvmcross-tibet binding-to-viewmodel-itself
[4] https://www.mvvmcross.com/documentation/fundmentals/dataバインディング
[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