次の方法で共有


パフォーマンスの最適化 : その他の推奨事項

更新 : 2007 年 11 月

このトピックでは、「WPF アプリケーションのパフォーマンスの最適化」のトピックで説明されている推奨事項を補足するパフォーマンスに関する推奨事項について説明します。

このトピックには次のセクションが含まれています。

  • ブラシの Opacity と要素の Opacity
  • オブジェクトへの移動
  • 大きな 3D サーフェイスのヒット テスト
  • CompositionTarget.Rendering イベント
  • ScrollBarVisibility=Auto は使用しない
  • Font Cache サービスの構成による起動時間の短縮
  • ターミナル サービスのレンダリングの機能強化
  • 関連トピック

ブラシの Opacity と要素の Opacity

Brush を使用して要素の FillStroke を設定するときには、要素の Opacity プロパティを設定するより Brush.Opacity 値を設定することをお勧めします。要素の Opacity プロパティを変更すると、WPF によって一時的なサーフェイスが作成される可能性があります。

オブジェクトへの移動

NavigationWindow オブジェクトは Window から派生し、コンテンツ ナビゲーションのサポートでウィンドウを拡張します。この拡張は、主に NavigationService と履歴を統合することによって行われます。NavigationWindow のクライアント領域は、統一リソース識別子 (URI) またはオブジェクトを指定することによって更新できます。この両方の方法を次のサンプルに示します。

private void buttonGoToUri(object sender, RoutedEventArgs args)
{
    navWindow.Source = new Uri("NewPage.xaml", UriKind.RelativeOrAbsolute);
}

private void buttonGoNewObject(object sender, RoutedEventArgs args)
{
    NewPage nextPage = new NewPage();
    nextPage.InitializeComponent();
    navWindow.Content = nextPage;
}

NavigationWindow オブジェクトには、そのウィンドウのユーザーのナビゲーションを記録する履歴があります。履歴の目的の 1 つは、ユーザーが自分の来た道を戻れるようにすることです。

統一リソース識別子 (URI) を使用して移動した場合、履歴には 統一リソース識別子 (URI) の参照のみが格納されます。したがって、ページに戻るたびにそのページが動的に再構築されることになり、ページの複雑さによってはかなりの時間がかかることもあります。この場合、履歴の格納の負荷は低い反面、ページの再構築にかかる時間が長くなる可能性があります。

オブジェクトを使用して移動した場合は、オブジェクトのビジュアル ツリー全体が履歴に格納されます。したがって、ページに戻るたびにページを再構築する必要はなく、ページがすぐに描画されます。この場合、履歴の格納の負荷は高くなりますが、ページの再構築にかかる時間は短くて済みます。

NavigationWindow オブジェクトを使用するときには、履歴のサポートがアプリケーションのパフォーマンスにどのように影響するのかを念頭に置いておく必要があります。詳細については、「ナビゲーションの概要」を参照してください。

大きな 3D サーフェイスのヒット テスト

大きな 3D サーフェイスのヒット テストは、CPU 消費の面でパフォーマンスへの影響が非常に大きくなります。3D サーフェイスがアニメーション化されている場合には特にその傾向が強くなります。そのようなサーフェイスでヒット テストを行う必要がない場合は、ヒット テストを無効にしてください。UIElement から派生したオブジェクトでは、IsHitTestVisible プロパティを false に設定することによってヒット テストを無効にできます。

CompositionTarget.Rendering イベント

CompositionTarget.Rendering イベントは、WPF を常にアニメーション化します。このイベントを使用する場合は、毎回デタッチしてください。

ScrollBarVisibility=Auto は使用しない

できる限り、ScrollBarVisibility.Auto 値を HorizontalScrollBarVisibility プロパティと VerticalScrollBarVisibility プロパティでは使用しないでください。これらのプロパティは、RichTextBoxScrollViewerTextBoxListBox の各オブジェクトで定義されています。代わりに、ScrollBarVisibilityDisabledHidden、または Visible に設定します。

Auto 値は、スペースが限られていて、スクロール バーを必要なときにだけ表示する場合に使用するための値です。ScrollBarVisibility 値の使用は、たとえば、数百行のテキストを含む TextBox ではなく、30 の項目を含む ListBox で役に立ちます。

Font Cache サービスの構成による起動時間の短縮

WPF Font Cache サービスは、WPF アプリケーション間でフォント データを共有します。このサービスは、まだ実行されていない場合は、実行する最初の WPF アプリケーションによって開始されます。Windows Vista を使用している場合は、[Windows Presentation Foundation (WPF) Font Cache 3.0.0.0] サービスの設定を [手動] (既定) から [自動 (遅延開始)] に変更することで、WPF アプリケーションの最初の起動時間を短縮できます。

ターミナル サービスのレンダリングの機能強化

リモート デスクトップ接続を使用すると、クライアントはアプリケーションをサーバー上でリモート実行しつつ、それをクライアント上に表示できます。サーバーは、Windows ターミナル サーバー (一度に複数のリモート デスクトップ接続のサービスが可能)、または Windows のいずれかのバージョン (単一のリモート デスクトップ接続のサービスが可能) になります。ユーザーがアプリケーションをリモート デスクトップ接続経由で実行する場合、アプリケーションはサーバー上で実行されます。クライアント上でのキーボードやマウスの操作はサーバーに転送され、その結果であるアプリケーション UI がサーバー上でビットマップとして生成されて、クライアントに転送されます。

ただし、ユーザー インターフェイスをシミュレートするために、ネットワーク経由でクライアントにビットマップを送信しても、UI のレンダリングをクライアント上でローカルに実行する場合と同じパフォーマンスは得られません。しかし、リモート デスクトップ接続 (RDC) セッションを介して実行される WPF アプリケーションは、クライアント上でのレンダリング Windows Vista の特別なレンダリング サポートを活用できます。

これを活用するためには、次の要件に対応している必要があります。

  • サーバーが Windows Vista Ultimate または Windows Vista Enterprise にインストールされている。

  • サーバーに Desktop Window Manager (DWM) メモリ要件を満たすだけの十分なメモリが搭載されている (ビデオ カードなど、他の DWM 要件は満たされていなくてもかまいません)。

  • クライアントがサーバーと同じ Vista のビルドである。

  • クライアントで Windows Vista Desktop Window Manager (DWM) を実行できる。Desktop Window Manager のセッション マネージャ サービスが実行されている場合、DWM は有効です。

  • クライアントで DWM を無効にする可能性があるアプリケーション (たとえばミーティング スペースやリモート アシスタンスなど) を実行しない。

  • クライアントが目的の WPF アプリケーションを持つサーバーにマルチホップしない。マルチホップとは、セッションを次々と作成することです。

  • クライアントのリモート デスクトップ接続の構成に以下が含まれている。

    • [リモート デスクトップ接続] - [オプション] - [エクスペリエンス] でデスクトップ コンポジションが選択されている。

    • [リモート デスクトップ接続] - [オプション] - [エクスペリエンス] でテーマが選択されている。

    • [リモート デスクトップ接続] - [オプション] - [画面] - [画面の色] で 32 ビット カラーが選択されている。

メモ :

DWM の要件については、「Windows Aero を有効にするための Windows Vista のルール」を参照してください。

参照

概念

アプリケーション パフォーマンスの計画

パフォーマンスの最適化 : ハードウェアの活用

パフォーマンスの最適化 : レイアウトとデザイン

パフォーマンスの最適化 : 2D グラフィックスとイメージング

パフォーマンスの最適化 : オブジェクトの動作

パフォーマンスの最適化 : アプリケーション リソース

パフォーマンスの最適化 : テキスト

パフォーマンスの最適化 : データ バインディング

WPF のパフォーマンス ツールとリソース

アニメーションのヒントとテクニック