2011-09-26 11 views
8

私はWPFを使用してMapsのようなアプリケーションを開発しています。 〜10,000のPathGeometry、シェイプがキャンバスに追加されています。 ScaleTransformとTranslateTransformをズームおよびパンコントロールに追加しました。WPFキャンバスのパフォーマンスを改善する

私が直面している問題は、ズームまたはパンするときにわずかな遅れがあることです。表示されている図形のみを処理できるようにデータを整理する方法はありますか?

より効率的にするためのヒントは参考になり、感謝します。

答えて

7

仮想キャンバスのコンセプトであるZoomableApplication2: A Million Itemsを使って、この興味深い記事をご覧ください。また、オンラインでライブ(xbap)デモを行っています。

6

あなたはどのような種類のものをキャンバスに載せていますか? pathGeometryを使用している場合、それらをPathクラスに囲んでいますか?そのような場合、Pathのスーパークラス階層にはFrameworkElementがあり、これは大量のパフォーマンスの低下を引き起こします。

Take a look at my question here.シェイプクラスについてですが、パフォーマンス低下の理由は同じですが、FrameworkElementです。

これを解決するには、代わりにPathGeometryを使用してDrawingContext.DrawGeometry()メソッドを使用してDrawingVisualのDrawingContextに囲みます。

ここで役立つリンクがいくつかあります。ジオメトリクラス(ArcGeometry、PathGeometryをなど)から派生したクラスによって提供さ Path Geometry

Optimizing Performance: 2D Graphics and Imaging

とラインの組み合わせを使用して、図形を自分で描くDrawingContext.DrawGeometry()

、および他のもの。

これは役立つはずです。

2

WPFの即時描画で最高のパフォーマンスを望む場合は、WriteableBitmapExをチェックしてください。これは私が最近寄稿した優れたオープンソースライブラリです。 WriteableBitmapにGDIのような描画機能を提供し、Windows Phone、WPF、Silverlightと互換性があります。 APIはシンプルですが、ブリッティング、ポリゴン、ライン、シンプルなシェイプなどを得ることができます。ただし、データテンプレートやグラデーションブラシは使用できません。