Xamarin.Mac のパフォーマンス

概要

Xamarin.Mac のアプリケーションは、Xamarin.iOS に似ており、次のような同じパフォーマンスに関する推奨事項の多くが適用されます。

ただし、macOS 固有の推奨事項で役に立つものも多くあります。

最新のターゲット フレームワークが優先される

Xamarin.Mac アプリケーションには、パフォーマンスの特性と機能が異なるターゲット フレームワークが複数あります。

可能な限り最新のものを優先し、依存ライブラリを使用してサポートを追加します。 最新のターゲット フレームワークのみが、アセンブリのサイズを大幅に減らすリンクの設定をすることができます。 これは AOT を有効にする場合に特に重要です。AOT の完全アセンブリのコンパイルが大規模な最終バンドルを生成できるからです。

リンカーを有効にする

読み込みでも "Just-In-Time" (JIT) でも、起動時間は最終的なバイナリのサイズに応じて線形的にある程度延長されます。 これを改善する最も簡単な方法が、リンカーで実行されないコードを削除することです。

この推奨事項は主に最新のターゲット フレームワークのユーザーに適用されますが、プラットフォーム リンクの使用により、制限付きでパフォーマンスを改善することもできます。

必要に応じて AOT を有効にする

起動時のパフォーマンスの別の側面が、コンピューター語コードへのアセンブリの JIT コンパイルです。 Ahead Of Time (AOT) コンパイルでは起動時間を大幅に短縮できますが、多くのマイナス面もあります。これについては AOT のドキュメントで説明しています。

パフォーマンスの高いデリゲートを使用する

多くの Xamarin.Mac アプリケーションは、NSCollectionViewNSOutlineViewNSTableView などの Cocoa ビューを中心に展開されています。 多くの場合、これらのビューは Cocoa に提供する Delegate クラスと DataSource クラスを使用して、表示するものは何かという質問に答えます。

これらのエントリ ポイントの多くが頻繁に呼び出され、スクロール時には 1 秒間に複数回呼び出されることもあります。

ユーザー インターフェイスがブロックされないように、簡単に計算される値を関数が返すようにしたり、既にキャッシュされている情報が使用されたりするようにしてください。

ビューの再利用に Cocoa が提供する API を使用する

多くの子ビューまたはセル (NSCollectionViewNSOutlineViewNSTableView など) が含まれる多くの Cocoa ビューは、ビューの作成および再利用のための API を提供します。 この API によって共有項目のプールが作成され、ビューを速くスクロールする場合のパフォーマンスの問題が回避されます。

非同期を使用し、UI をブロックしない

デスクトップ アプリケーションは大量のデータを処理することが多いため、同期操作を待機している UI スレッドが簡単にブロックされてしまいます。

可能な限り、非同期とスレッドを使用し、UI がブロックされないようにします。

長時間実行される操作では、Apple の HIG に記載されている NSProgressIndicator やその他のオプションを使用してユーザーに通知することを検討してください。