Microsoftは、“Performance Tips For Metro Style XAML Apps(MetroスタイルXAMLアプリのパフォーマンスチップス)”という名前のドキュメントを公開した。これには、応答性について、安定した滑らかなアニメーション、起動時間の改善、リソース消費量の削減など、いくつかの提案が含まれている。概要は以下の通り。
UI関連 -
- バックグラウンドスレッドを使って、UIスレッドの応答を維持する– asyncとawaitでプログラムする
- レイアウトパスで無効なレイアウトを避ける
- 複数のファイルを処理するときには、Windows.Storage.BulkAccess APIとWindows.Storage.StorageFolder.GetFilesAsync APIを使う
- WinRT APIを呼び出すとき、特にホットパスのコードのときにはInteropのオーバーヘッドを意識する
アニメーション -
- 可能な限り、アニメーションは、(UIスレッドから)独立させる
- 過剰な描画を最小化する– たとえば、完全に隠れているエレメントは無視する、複合エレメントの代わりにレイヤオブジェクトを使用する
- 変更/アニメーションされないエレメントの場合、キャンバスをキャッシュする
- Animating Web Viewを避ける
起動時間 -
- スプラッシュ画面、読み込み中ページを使って、裏でデータを読み込んでいることの認識性を向上させる
- 起動時に必要なXAMLを最小限にする
- エレメント数を最適化する
- 大きく違わない場合、アセンブリを組み合わせる – ひとつのアセンブリを読み込むことは一般的に、2つの小さなものを読み込むよりも時間が短い
アプリのプロセスライフタイム -
- 終了の前のサスペンド – アプリをサスペンドするとき、終了する前にそのデータを保存するために5秒まで待つ
- シリアライズとデシリアライズはデータが変更されたときだけにする
- 停止するときに可能な限り多くのメモリと、ファイルとデバイスのハンドルを解放する。それでも、復元を迅速に行えるように設計する
- ブラシをResourceDictionaryエレメントとして、ページ間で再利用する – これでキャッシュを向上させることができる
データの表示 -
- ビューポートの近くのオブジェクトだけを作成するといったUIの仮想化や、巨大なデータセットで、必要な時に少量の変更分だけを読み込むようにデータの仮想化を使用する
- アイテムテンプレートセレクタを使用する
メディア -
- 可能であれば、全画面で再生する
- 組み込みビデオに重ねない
- MediaElementのソースを後から設定する
- 可能であれば、ビデオ/画像の解像度をデバイスの解像度に合わせる
- Windows 8では、ビデオにはH.264を優先的なフォーマットにして、オーディオにはACCとMP3を推奨する。ゲームなど短いオーディオ効果ではWAVを使用する
同紙には、Microsoftによるコードサンプルによる詳細説明も含まれている。同紙でカバーされていないDirectXとXAMLの相互運用という記事も提供されている。