次の方法で共有


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

WPF の内部アーキテクチャには、ハードウェアとソフトウェアの 2 つのレンダリング パイプラインがあります。 このトピックでは、アプリケーションのパフォーマンスの最適化に関する決定に役立つ、これらのレンダリング パイプラインに関する情報を提供します。

ハードウェア レンダリング パイプライン

WPF のパフォーマンスを決定する上で最も重要な要因の 1 つは、レンダリングバインドされていることです。レンダリングするピクセルが多いほど、パフォーマンス コストが高くなります。 ただし、グラフィックス処理装置 (GPU) にオフロードできるレンダリングが多いほど、パフォーマンス上の利点が得られます。 WPF アプリケーションハードウェアレンダリングパイプラインは、Microsoft DirectX バージョン 7.0 以上をサポートするハードウェア上の Microsoft DirectX 機能を最大限に活用します。 Microsoft DirectX バージョン 7.0 および PixelShader 2.0 以降の機能をサポートするハードウェアによって、さらに最適化を行うことができます。

ソフトウェア レンダリング パイプライン

WPF ソフトウェア レンダリング パイプラインは、完全に CPU バインドされています。 WPF は、CPU の SSE および SSE2 命令セットを利用して、最適化されたフル機能のソフトウェア ラスタライザーを実装します。 ソフトウェアへのフォールバックは、ハードウェア レンダリング パイプラインを使用してアプリケーション機能をレンダリングできない場合にシームレスです。

ソフトウェア モードでのレンダリング時に発生する最大のパフォーマンスの問題は、レンダリングするピクセル数として定義されているフィル レートに関連しています。 ソフトウェア レンダリング モードでのパフォーマンスが気になる場合は、ピクセルが再描画される回数を最小限に抑えるようにしてください。 たとえば、青い背景を持つアプリケーションがあり、その上に少し透明なイメージをレンダリングする場合、アプリケーション内のすべてのピクセルを 2 回レンダリングします。 その結果、青い背景しか持たない場合よりも、画像を使用してアプリケーションをレンダリングするのに 2 倍の時間がかかります。

グラフィックス レンダリング層

アプリケーションが実行されるハードウェア構成を予測することは非常に困難な場合があります。 ただし、アプリケーションが異なるハードウェアで実行されている場合に機能をシームレスに切り替えることができる設計を検討し、各ハードウェア構成を最大限に活用できるようにすることができます。

これを実現するために、WPF には、実行時にシステムのグラフィックス機能を決定する機能が用意されています。 グラフィックス機能は、ビデオ カードを 3 つのレンダリング機能レベルの 1 つとして分類することによって決定されます。 WPF は、アプリケーションがレンダリング機能レベルのクエリを実行できるようにする API を公開します。 その後、アプリケーションは、ハードウェアでサポートされているレンダリング層に応じて、実行時に異なるコード パスを取得できます。

レンダリング層レベルに最も影響を与えるグラフィックス ハードウェアの機能は次のとおりです。

  • ビデオ RAM グラフィックス ハードウェア上のビデオ メモリの量によって、グラフィックスの合成に使用できるバッファーのサイズと数が決まります。

  • ピクセル シェーダー ピクセル シェーダーは、ピクセル単位で効果を計算するグラフィックス処理関数です。 表示されるグラフィックスの解像度によっては、表示フレームごとに数百万ピクセルの処理が必要になる場合があります。

  • 頂点シェーダー 頂点シェーダーは、オブジェクトの頂点データに対して数学的演算を実行するグラフィックス処理関数です。

  • マルチテクスチャのサポート マルチテクスチャのサポートとは、3D グラフィックス オブジェクトのブレンド操作中に 2 つ以上の異なるテクスチャを適用する機能を指します。 マルチテクスチャ のサポートの程度は、グラフィックス ハードウェア上のマルチテクスチャ ユニットの数によって決まります。

ピクセル シェーダー、頂点シェーダー、マルチテクスチャ機能は、特定の DirectX バージョン レベルを定義するために使用されます。これを使用して、WPF のさまざまなレンダリング層を定義します。

グラフィックス ハードウェアの機能によって、WPF アプリケーションのレンダリング機能が決まります。 WPF システムは、次の 3 つのレンダリング層を定義します。

  • レンダリング層 0 グラフィックス ハードウェア アクセラレーションなし。 DirectX バージョン レベルがバージョン 7.0 未満です。

  • レンダリング層 1 部分的なグラフィックス ハードウェア アクセラレーション。 DirectX バージョン レベルがバージョン 7.0 以上で、 バージョン 9.0 未満です。

  • レンダリング層 2 ほとんどのグラフィックス機能では、グラフィックス ハードウェア アクセラレーションが使用されます。 DirectX バージョンが 9.0 以上です。

WPF レンダリング層の詳細については、「 グラフィックス レンダリング層」を参照してください。

こちらも参照ください