优化渲染数千个元素

时间:2014-02-08 12:20:23

标签: c# wpf canvas dispatcher

我在优化渲染大量自定义控件时遇到了一个大问题。我正在开发一个系统,它将覆盖数千个自定义控件,并每秒或频繁更新这些控件的几个值。还将支持缩放和平移。但我发现渲染(在画布上)花费了大量时间,缩放和平移是滞后的。 有没有人有这种wpf应用程序的经验?

3 个答案:

答案 0 :(得分:0)

根据我的经验,这几乎总是由于无意中禁用虚拟化和容器回收,通常是通过样式化/模板化。我的第一步是在运行时检查WPF Tree Visualizer,并确保只绘制屏幕上实际可见的元素。

答案 1 :(得分:0)

您可以使用BitmapCache禁用未更改的重新渲染控件。

根据我的经验,这极大地改善了缩放和平移性能。

为更复杂的控件启用它。

示例:

<Rectangle CacheMode="BitmapCache" />

<Rectangle>
    <Rectangle.CacheMode>
        <BitmapCache/>
    </Rectangle.CacheMode>
</Rectangle>

详情here

答案 2 :(得分:0)

使用相同尺寸且位于相同位置的2幅画布(顶部画布覆盖底部画布)。

底部画布:显示所有控件。这是一个静态图像(缓存),可能每30秒左右刷新一次。

Top Canvas:显示过去30秒内已更改的每个控件。

两幅画布完全对齐,因此顶部画布上每个最近更改的控件都会在底部画布上完全模糊其过时的双胞胎。

这样你只需要绘制几个已经改变的控件而不是全部千个控件。