Ich arbeite an einer spielähnlichen App, die bis zu tausend Formen (Ellipsen und Linien) hat, die sich ständig mit 60 fps ändern. Nachdem ich eine excellent article on rendering many moving shapes gelesen habe, habe ich dies mit einem benutzerdefinierten Canvas-Nachkommen implementiert, der OnRender
überschreibt, um die Zeichnung über eine DrawingContext
zu machen. Die Leistung ist ziemlich vernünftig, obwohl die CPU-Auslastung hoch bleibt.Leistung von DrawingVisual vs Canvas.OnRender für viele sich ständig ändernden Formen
Allerdings schlägt der Artikel, dass der effizienteste Ansatz für ständig in Bewegung Formen viele DrawingVisual
Instanzen verwenden statt OnRender
. Leider erklärt es aber nicht warum das für dieses Szenario schneller sein sollte.
Die Implementierung auf diese Weise zu ändern, ist kein kleiner Aufwand, daher würde ich gerne die Gründe und die Frage verstehen, ob sie auf mich anwendbar sind, bevor Sie sich für den Wechsel entscheiden. Warum konnte der Ansatz DrawingVisual
in diesem Szenario zu einer geringeren CPU-Auslastung führen als der Ansatz OnRender
?
Romkyns, Sie könnten mit DrawingVisual und Canvas.OnRender() eine vereinfachte Version erstellen, um die Leistung zu vergleichen, bevor Sie in große Veränderungen eintauchen. Was die Antwort betrifft - ich stimme Charlie vollkommen zu. – Anvaka