XNA/WinFormsに基づく既存のタイルマップエディターをWPFに移行する作業を行っています。私はWPFにかなり慣れていませんが、ほとんどの概念を理解するのはそれほど難しくありません。(Viewbox)から派生したOnRenderメソッドによって提供されるDrawingContextのDrawImageメソッドを使用して、マップを描画するために、ViewboxをScrollViewerに埋め込みます。問題は、かなり大量のタイルが画面に表示されている場合(私のマシンでは> 1000)、XNA/WinFormバージョンとほぼ同じパフォーマンスを達成できないことです。ズームとパンを実装しましたが、ズームアウトしすぎたり、画面に大量のタイルが表示されているときにパンしたりすると、ユーザーエクスペリエンスを損なう大きなラグが発生します。私はいくつかの明白な最適化対策を講じました(ソースビットマップのフリーズ、見えないタイルのカリング、ビットマップスケーリングモードのLowQualityへの設定、キャッシュキャッシュのヒントを提供します)が、問題を解決していないようです。問題は明らかに、WPFがDrawingContextを使用してテクスチャクワッドの描画を処理する方法にあります。
問題を再現するために必要なすべてのコードを含むサンプルアプリケーションを提供しました:SampleGridDrawingExample
マウスの中ボタンを押したまま、マウスを動かしてパンします。ウィンドウのサイズが大きくなるにつれて、それはますます目立つようになります(明らかに、より多くのタイルがレンダリングされているためです)。
妥当なパフォーマンスで大量のテクスチャクワッドを描画するために、WPF内でDrawingContextよりも高速な方法はありますか?XNA / WinFormsを使用すると、妥当なラグで複数のレイヤーに最大50000のタイルを描画できますが、現在のアプローチを使用するWPFでは、1000を超えると顕著なラグが発生します(> 10000はアプリケーションをクロールします)。