Ich habe diese WPF-VS2008 Bildschirmschoner-Vorlage und begann, einen neuen Bildschirmschoner zu erstellen. Ich habe einige Erfahrung mit WinForms-Plattform (GDI +) Bildschirmschoner, so bin ich ein wenig verloren mit WPF.
- Das Hintergrund-Element für meinen Bildschirmschoner ist Canvas.
- Ein DispatcherTimer-Tick ist auf 33 msec eingestellt, was ~ 30 FPS entspricht.
- Background-color ist nur ein großer LinearGradientBrush.
- Auf dem Bildschirm habe ich (pro verfügbaren Bildschirm, auf meinem lokalen Computer habe ich 2) n-Ellipsen mit zufällig berechneten (Initialisierung) Hintergrundfarben + Alpha-Kanal gezeichnet. Sie sind alle in Canvas's Kinder Sammlung.
- Ich bewege diese Ellipsen auf dem Bildschirm mit einiger Logik (jeder DispatcherTimer-Tick). Ich mache eine Bewegung pro Ellipse, und dann rufen Sie einfach Canvas.SetLeft(...) und Canvas.SetTop(...) für jede Ellipse.
- Wenn N (Anzahl der Ellipsen) höher als 70-80 ist, fange ich an, Grafikverlangsamungen zu bemerken.
Nun frage ich mich, ob es irgendetwas gibt, was ich tun kann, um die grafische Glätte zu verbessern, wenn ich höhere N-Werte wähle? Kann ich "etwas" einfrieren, bevor ich meine Ellipsen bewege, und "etwas" wieder einfrieren, wenn ich fertig bin? Oder gibt es einen anderen Trick, den ich anwenden könnte?
Nicht, dass ich zu pingelig wäre, was die erwähnten Leistungseinbußen angeht - denn wenn N==50, funktioniert alles reibungslos, wie es sollte. Selbst wenn Ellipsen ALLE an der GLEICHEN Stelle sind (viel Transparenz), gibt es überhaupt keine Probleme.