2

Canvas オブジェクトの子である FrameworkElement:DrawingVisual を使用して、9000 個のポリゴン オブジェクトをわずかに下回るベクター データを描画しています。オブジェクトのツリーは次のようになります。

WPF Window
-Canvas
--FrameworkElement
---DrawingVisual -> DrawingContext.DrawGeometry

ここまでは順調ですね。すべてのレンダリング メソッドのタイミングを計っていますが、予想どおりで、DrawingContext が処理を実行するのに 0.32 秒、合計で 0.5 秒です。EdgeMode をデフォルト (アンチエイリアス) に設定すると、完成した描画がわずか 0.5 秒後にキャンバスに表示されます。

ただし、すべての行にエイリアスを設定する必要があるため、キャンバス オブジェクトで RenderingOptions.SetEdgeMode を EdgeMode.Aliased に使用します。

これを行った後、レンダリング時間に識別可能な違いはなく、合計時間は 0.5 秒です。しかし、完成した描画がウィンドウに表示されるまでに 4 秒以上かかります。これは、アンチエイリアス バージョンの 0.5 秒未満と比較されます。唯一の違いは、次の 1 行のコードです。

 RenderOptions.SetEdgeMode(myCanvas, EdgeMode.Aliased);

ウィンドウのサイズを変更すると、同じことが起こります。エイリアス バージョンのサイズ変更には、アンチエイリアス バージョンに比べてはるかに時間がかかります。明らかに、この場合、私の描画コードは呼び出されていないので、問題は別の場所にあるに違いありません。

エイリアス レンダリング モードでは、コードの外部にある何かが動作を大幅に遅くしているようです。これは、予想とはまったく逆です。それで、私はここで何が欠けていますか?

4

0 に答える 0