我拿了这个WPF-VS2008 ScreenSaver template并开始制作新的屏幕保护程序。我对winForms-platform(GDI +)屏幕保护程序有一些经验,所以我对WPF有点迷失。
现在,我想知道,在选择更高的N值时,我是否可以采取任何措施来改善图形平滑度?我可以在移动我的椭圆之前“冻结”“某些东西”,并在我完成时“冻结”“某些东西”吗?或者我还能做其他任何技巧吗?
并不是说我对提到的性能下降过于挑剔 - 因为当N == 50时,一切都应该顺利进行。即使Ellipses在同一个地方都是ALL(加载透明度的东西),也没有任何问题。
答案 0 :(得分:4)
您是否尝试过在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/)
答案 1 :(得分:0)
冻结之后无法解冻(尽管默认情况下对象的副本是未解除的)。默认情况下,WPF中也启用了双缓冲,因此您无法在此处获得。
如果尚未完成提高性能的方法是使用geometry objects(例如Ellipse Geometry而不是形状,如果您不需要所有事件,因为它们的重量较轻。
我也发现这篇MSDN文章Optimizing Performance: 2D Graphics and Imaging表明CachingHint可能会提供其他一些提示。
最后确保您使用的是最新的Service Pack,因为它有许多性能改进outlined here
答案 2 :(得分:0)
如果在从Freezable继承的对象上调用Freeze方法,那么您将提高性能 - 例如,画笔。
原因是Freezable支持必须由图形系统处理的额外更改通知,当您调用Freeze时,对象无法再更改,因此不再有更改通知。
对于此通知系统的示例,如果您创建画笔,使用它来绘制矩形(例如),然后更改画笔,屏幕上的矩形将更改颜色。