パフォーマンスの最適化 : ハードウェアの活用
WPF の内部アーキテクチャには、ハードウェアとソフトウェアの 2 つのレンダリング パイプラインがあります。 このトピックでは、レンダリング パイプラインに関して、アプリケーションのパフォーマンスの最適化に関する判断に役立つ情報を提供します。
ハードウェア レンダリング パイプライン
WPF のパフォーマンスを決定する最も重要な要因の 1 つは、それがレンダリング制約であるということです。つまり、描画するピクセルが増えるほどパフォーマンスへの負荷が大きくなります。 ただし、graphics processing unit (GPU) にオフロードできるレンダリングが増えれば、その分パフォーマンスが向上します。 WPF アプリケーションのハードウェア レンダリング パイプラインは、Microsoft DirectX Version 7.0 以上をサポートするハードウェアの Microsoft DirectX 機能を最大限に活用します。 Microsoft DirectX Version 7.0 と PixelShader 2.0+ の機能をサポートするハードウェアでは、さらなる最適化を実現できます。
ソフトウェア レンダリング パイプライン
WPF のソフトウェア レンダリング パイプラインは完全に CPU 制約です。 WPF は、CPU の SSE/SSE2 命令セットを活用して、最適化されたフル機能のソフトウェア ラスタライザーを実装します。 ハードウェア レンダリング パイプラインを使用して実行できないアプリケーション機能のレンダリングは、シームレスにソフトウェア レンダリングに戻ります。
ソフトウェア モードでのレンダリングにおけるパフォーマンスの最大の問題は、塗りつぶし速度に関連する問題です。塗りつぶし速度は、描画するピクセルの数として定義されます。 ソフトウェア レンダリング モードでのパフォーマンスに懸念がある場合は、ピクセルの再描画の回数をできるだけ減らすようにしてください。 たとえば、アプリケーションに青い背景があり、その上にやや透明のイメージを描画する場合は、アプリケーションのすべてのピクセルが 2 回描画されることになります。 その結果、アプリケーションにイメージが含まれている場合は、青い背景のみの場合に比べて描画に 2 倍の時間がかかることになります。
グラフィックスの描画層
アプリケーションが実行されるハードウェア構成を予測するのは非常に難しい場合があります。 ただし、異なるハードウェアで実行された場合にシームレスに機能を切り替えられるようにアプリケーションを設計することもできます。これにより、アプリケーションでそれぞれのハードウェア構成を最大限に活用できます。
そのために、WPF にはシステムのグラフィックス機能を実行時に判別する機能が用意されています。 グラフィックス機能の判別は、ビデオ カードを 3 つの描画層に分類することによって行われます。 WPF が公開する API を使用して描画層を照会することにより、 アプリケーションは、ハードウェアでサポートされている描画層に応じて、実行時に異なるコード パスを受け取ることができます。
描画層のレベルに大きく影響するグラフィックス ハードウェアの機能は、次のとおりです。
ビデオ RAM グラフィックス ハードウェアのビデオ メモリの量によって、グラフィックスを合成する際に使用できるバッファーのサイズと数が決まります。
ピクセル シェーダー ピクセル シェーダーは、ピクセル単位で効果を計算するグラフィックス処理関数です。 表示するグラフィックスの解像度によっては、各表示フレームの処理に数百万ピクセルが必要な場合もあります。
頂点シェーダー 頂点シェーダーは、オブジェクトの頂点データの算術演算を実行するグラフィックス処理関数です。
マルチテクスチャのサポート マルチテクスチャがサポートされていると、3D グラフィックス オブジェクトのブレンド操作を行うときに、2 つ以上の別個のテクスチャを適用できます。 マルチテクスチャのサポートの度合いは、グラフィックス ハードウェアのマルチテクスチャ ユニットの数によって決まります。
ピクセル シェーダー、頂点シェーダー、およびマルチテクスチャの各機能を使用して、DirectX の特定のバージョン レベルを定義し、次にこのバージョン レベルを使用して WPF のさまざまな描画層を定義します。
グラフィックス ハードウェアの機能によって、WPF アプリケーションの表示能力が決まります。 WPF システムは、次の 3 つの描画階層を定義します。
描画層 0 グラフィックス ハードウェアの加速が使用されません。 DirectX のバージョン レベルは Version 7.0 未満です。
描画層 1 グラフィックス ハードウェアの加速が部分的に使用されます。 DirectX のバージョン レベルは、Version 7.0 以上で Version 9.0 未満です。
描画層 2 ほとんどのグラフィックス機能でグラフィックス ハードウェアの加速を使用します。 DirectX のバージョン レベルは Version 9.0 以上です。
WPF レンダリング層の詳細については、「グラフィックスの描画層」を参照してください。