Ich muss eine Menge Shape (etwa 1/2 hunderttausend) als [Canvas] [2] 's Kinder zeichnen. Ich mache das in meiner WPF-Anwendung, die Arbeit in zwei Teile teilt: Zuerst erstelle ich Formen, indem ich die Eigenschaften von jedem von ihnen (wie Rand, Fülle, Breite, usw.) einstelle, nachdem ich Formen als Canvas-Kinder hinzugefügt habe.Wie kann die Canvas-Renderleistung verbessert werden?
MyCanvas.Children.Add(MyShape)
Jetzt möchte ich die Leistung des zweiten Teils verbessern, denn wenn ich die Formen zeichnen meine Anwendung für einen langen Zeitraum gesperrt wird. Also habe ich versucht, die Dispatcher und ihre Methode [BeginInvoke] [4] mit verschiedenen [Prioritäten] [5] zu verwenden: nur wenn ich die Hintergrund-Priorität die Hauptanwendung nicht blockiert, sonst bleibt die Anwendung blockiert und das "Bild" ist nicht angezeigt, bis alle Formen zu meinem Canvas hinzugefügt wurden, aber wenn ich die Hintergrundpriorität verwende, ist offensichtlich alles langsamer. Ich habe auch versucht, einen neuen Thread zu erstellen, anstatt den Dispatcher zu verwenden, aber es gab keine signifikante Änderung.
Wie kann ich dieses Problem beheben und generell die Leistung meiner Anwendung verbessern, wenn ich meine Shapes zu Canvas hinzufüge?
Danke.
Haben Sie DrawingVisual ausprobiert? –
Nein. Können Sie mir ein Beispiel dafür geben, wie Sie DrawingVisual anstelle einer Form wie Ellipse oder Pfad verwenden? Zum Beispiel, wie kann ich meinen Canvas [this] (http://msdn.microsoft.com/en-us/library/ms745546.aspx) Pfad mit DrawingVisual hinzufügen? – gliderkite
Ja, es gibt einige tolle Informationen zu Google. Hier ist ein Link, mit dem Sie beginnen können: http://msdn.microsoft.com/en-us/magazine/dd483292.aspx –