Verbesserung der WPF-Canvas-Leistung

8

Ich entwickle eine Maps-ähnliche Anwendung mit WPF. Ich habe ~ 10.000 PathGeometry, Shapes auf der Leinwand hinzugefügt. Ich habe ScaleTransform und TranslateTransform für Zoom- und Panning-Steuerelemente hinzugefügt.

Das Problem, vor dem ich stehe, ist, wenn ich zoome oder schwenken, gibt es eine leichte Verzögerung. Gibt es eine Möglichkeit, die Daten so zu organisieren, dass ich nur die sichtbaren Shapes behandle?

Irgendwelche Hinweise, um es effizienter zu machen, werden hilfreich und geschätzt sein.

    
Sam 26.09.2011, 20:25
quelle

3 Antworten

7

Ich schlage vor, dass Sie sich diesen interessanten Artikel mit dem Konzept von Virtual Canvas ansehen: ZoomableApplication2: Eine Million Artikel . Es hat auch eine live (xbap) Demo online.

    
Simon Mourier 26.09.2011, 20:52
quelle
6

Was für eine Art von Zeug steckst du auf die Leinwand? Wenn Sie pathGeometry verwenden, umschließen Sie sie in der Path-Klasse? Wenn dies der Fall ist, hat Path FrameworkElement in seiner Superklassenhierarchie, die für einen massiven Leistungsverlust verantwortlich ist.

Schauen Sie bei meiner Frage hier. Obwohl es um die Shape-Klasse geht, ist der Grund für die Leistungsverschlechterung dasselbe, FrameworkElement.

Wenn Sie dies tun, verwenden Sie stattdessen PathGeometry und schließen Sie es mit DrawingContext.DrawGeometry () in DrawingContext eines DrawingVisual ein.

Hier sind einige Links, die helfen sollten. Pfadgeometrie

DrawingContext.DrawGeometry ()

Optimieren der Leistung: 2D-Grafiken und Imaging

Zeichnen Sie die Formen selbst, indem Sie eine Kombination von Linien und anderen Dingen verwenden, die von Klassen bereitgestellt werden, die von der Geometry-Klasse (ArcGeometry, PathGeometry usw.) abgeleitet sind.

Das sollte helfen.

    
SpeedBirdNine 27.09.2011 02:25
quelle
2

Wenn Sie die ultimative Leistung zum sofortigen Zeichnen in WPF wünschen, lesen Sie WriteableBitmapEx . Dies ist eine exzellente Open-Source-Bibliothek, zu der ich kürzlich beigetragen habe. Es bietet GDI-ähnliche Zeichenfunktionen auf WriteableBitmap und ist kompatibel mit Windows Phone, WPF und Silverlight. Die API ist einfach, Sie erhalten Blitting, Polygone, Linien und einfache Formen usw. Sie werden jedoch keine Datatemplates und Gradientenpinsel bekommen.

    
Dr. ABT 22.12.2011 16:59
quelle