首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF - ScreenSaver图形性能改进

WPF - ScreenSaver图形性能改进
EN

Stack Overflow用户
提问于 2009-03-16 11:31:23
回答 2查看 1.7K关注 0票数 2

我拿了这个WPF-WPF 2008 ScreenSaver模板,开始做一个新的屏幕保护程序。我有一些使用winForms (GDI+)屏幕保护程序的经验,所以我有点迷上了WPF。

  1. 我的屏幕保护程序的背景元素是画布。
  2. 一个DispatcherTimer滴答被设置为33毫秒,这是~ 30 FPS。
  3. 背景色只是一个巨大的LinearGradientBrush。
  4. 在我的屏幕上(每个可用的屏幕,在我的本地计算机上,我有2) n个椭圆,用随机计算的(初始化)背景色+ Alpha通道绘制。他们都在画布的儿童收藏。
  5. 我用一些逻辑(每一个DispatcherTimer勾号)将这些椭圆在屏幕上移动。我每椭圆移动一次,然后调用Canvas.SetLeft(.)和Canvas.SetTop(.)每一个椭圆。
  6. 如果N(椭圆数)高于70-80,我开始注意到图形减速.

现在,我想知道,在选择更高的N值时,我能做些什么来改善图形的平滑性吗?我可以“冻结”“东西”之前,我的椭圆和“不冻结”“某事”,当我完成?或者我还能做些什么?

并不是说我会对提到的性能下降太挑剔-因为当N==50时,一切正常运行。即使椭圆都在同一个位置(很多透明的东西),也没有任何问题。

EN

回答 2

Stack Overflow用户

发布于 2009-03-27 04:56:29

您是否尝试过在CompositionTarget.Rendering事件中而不是在计时器中呈现?当我使用渲染事件和我自己的双缓冲时,我在3D屏幕保护程序中获得了令人印象深刻的性能。(参见http://stuff.seans.com/2008/08/21/simple-water-animation-in-wpf/http://stuff.seans.com/2008/08/24/raindrop-animation-in-wpf/http://stuff.seans.com/2008/09/01/writing-a-screen-saver-in-wpf/ )

票数 4
EN

Stack Overflow用户

发布于 2009-03-16 12:06:37

一旦被冻结了,就不可能解除冻结(尽管在默认情况下,对象的副本是unfozen )。默认情况下,双缓冲在WPF中也是启用的,所以您不能在这里获得。

提高性能的一种方法是使用几何对象 (如椭圆几何 ),而不是形状(如果您不需要对所有事件进行处理),因为这些事件都比较轻。

我还发现了这篇MSDN文章优化性能:二维图形与成像,它建议使用CachingHint可能会有帮助,还有其他一些提示。

最后,确保您正在使用最新的service,因为它具有许多性能改进( 在此概述 )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/650038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档