8

私はWPFを使用してアプリケーションのようなマップを開発しています。キャンバスに最大10,000個のPathGeometry、Shapesが追加されています。ズームとパンのコントロール用にScaleTransformとTranslateTransformを追加しました。

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

それをより効率的にするためのヒントは役に立ち、高く評価されます。

4

3 に答える 3

7

Virtual Canvas: ZoomableApplication2:A Million Itemsのコンセプトで、この興味深い記事をご覧になることをお勧めします。また、オンラインでのライブ(xbap)デモもあります。

于 2011-09-26T20:52:35.170 に答える
6

キャンバスにどんなものを置いていますか?pathGeometryを使用している場合、それらをPathクラスで囲んでいますか?その場合、Pathのスーパークラス階層にFrameworkElementがあり、パフォーマンスが大幅に低下します。

ここで私の質問を見てください。Shapeクラスに関するものですが、パフォーマンスが低下する理由は同じですが、FrameworkElementです。

その場合の解決策は、代わりにPathGeometryを使用し、DrawingContext.DrawGeometry()メソッドを使用してDrawingVisualのDrawingContextで囲むことです。

ここに役立つはずのいくつかのリンクがあります。 パスジオメトリ

DrawingContext.DrawGeometry()

パフォーマンスの最適化:2Dグラフィックスとイメージング

そして、線の組み合わせや、Geometryクラスから派生したクラス(ArcGeometry、PathGeometryなど)によって提供されるその他のものを使用して、自分で図形を描画します。

これは役立つはずです。

于 2011-09-27T02:25:51.943 に答える
2

If you want the ultimate in performance for immediate drawing in WPF, then check out WriteableBitmapEx. This is an excellent open source library, which I recently contributed to. it provides GDI-like drawing capabilities on WriteableBitmap and is compatible with Windows Phone, WPF and Silverlight. The API is simple, you get blitting, polygons, lines and simple shapes etc... You won't get datatemplates and gradient brushes however.

于 2011-12-22T16:59:41.290 に答える