提高WPF UI呈现速度的方法

如果WPF应用程序的屏幕包含许多原始控件,它的渲染会变得迟钝。除了增加更少的控件和使用更强大的视频卡,在这种情况下,提高WPF应用程序的响应能力的建议方法是什么?

有没有办法以某种方式使用屏幕外缓冲或类似的东西?

我们的团队面临着渲染性能的问题。在我们的例子中,我们有大约400个运输单位,我们应该给每个单位的图表有很多细节(文本标签,特殊标记,不同的几何形状等)。

在我们的第一个实现中,我们将每个图表分成基本元素,并通过Binding组合整个单元的图表。这是非常悲伤的过期。 UI反应极为缓慢。

因此,我们决定为每个单元创建一个UI元素,并使用DrawingContext渲染图表。虽然这在性能方面好多了,我们花了大约一个月的时间来提高渲染效果。

一些建议:

>缓存所有内容。画笔,颜色,几何,格式化文本,字形。 (例如,我们有两个类:RenderTools和TextCache。每个单元的渲染进程都会寻址到两个类的共享实例,所以如果两个图表有相同的文本,它的准备只执行一次。
> Freeze Freezable,如果你打算使用它很长时间。特别是几何。复杂的未冻结几何体执行HitTest非常慢。
>选择渲染每个图元的最快方式。例如,有大约6种文本呈现方式,但最快的是DrawingContext.DrawGlyphs。
>使用分析器来发现热点。例如,在我们的项目中,我们有几何缓存,并根据需要渲染它们。似乎是,没有可能的改进。但有一天我们想到如果我们将一次渲染几何和缓存准备好的视觉效果?在我们的情况下,这种方法可以接受我们的单位的图表只有几个州。当图表数据更改时,我们为每个状态重建DrawingVisual并将它们放入缓存中。

当然,这种方式需要一些投资,它的枯燥乏味的工作,但结果是真棒。

顺便说一下:当我们打开WPF缓存选项(你可以找到链接的答案),我们的应用程序挂了。

http://stackoverflow.com/questions/5401549/ways-to-improve-wpf-ui-rendering-speed

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:提高WPF UI呈现速度的方法