Я взял этот шаблон WPF-VS2008 ScreenSaver и начал делать новую заставку. У меня есть некоторый опыт работы с заставками на WinForms-платформе (GDI +), поэтому я немного растерялся с WPF.
- Фон-элемент для моей заставки - Canvas.
- Тик DispatcherTimer установлен на 33 мсек, что составляет ~ 30 FPS.
- Цвет фона - это всего лишь одна огромная кисть LinearGradientBrush.
- На экране, который у меня есть (для каждого доступного экрана, на моем локальном компьютере, у меня есть 2) n-эллипсы, нарисованные случайным образом (инициализация) цвета фона + альфа-канал. Все они находятся в детской коллекции Canvas.
- Я перемещаю эти эллипсы по экрану с некоторой логикой (каждый тик DispatcherTimer). Я делаю движение для каждого эллипса, а затем просто вызываю Canvas.SetLeft (...) и Canvas.SetTop (...) для каждого эллипса.
- Если N (количество эллипсов) больше> 70-80, я начинаю замечать замедление графики.
Теперь, мне интересно, могу ли я что-нибудь сделать, чтобы улучшить графическую гладкость при выборе более высоких N-значений? Могу ли я «заморозить» «что-то» перед тем, как переместить мои эллипсы, и «разморозить» «что-то», когда я закончу? Или есть какой-то другой трюк, который я мог бы сделать?
Не то чтобы я был слишком требователен к упомянутым падениям производительности - потому что когда N == 50, все работает гладко, как и должно. Даже если эллипсы ВСЕ в одном и том же месте (множество вещей, связанных с прозрачностью), проблем вообще нет.