改善WPF Canvas性能

Sam*_*Sam 8 wpf performance maps wpf-controls scaletransform

我正在使用WPF开发类似地图的应用程序.我有~10,000个PathGeometry,Shapes添加到画布上.我已经添加了ScaleTransform和TranslateTransform来进行缩放和平移控件.

我面临的问题是,当我缩放或平移时,会有轻微的延迟.有没有办法组织数据,以便我只处理可见的形状?

任何提高效率的提示都会有所帮助和赞赏.

Sim*_*ier 7

我建议你看看这篇有趣的文章,其中包括Virtual Canvas:ZoomableApplication2:A Million Items.它还有一个在线直播(xbap)演示.


Spe*_*ine 6

你在画布上放什么样的东西?如果使用pathGeometry,是否将它们封装在Path类中?如果是这样,Path在其超类层次结构中具有FrameworkElement,这会导致大量性能损失.

看看我的问题.虽然它是关于Shape类的,但是性能下降的原因是相同的,FrameworkElement.

如果您这样做,解决方案是使用PathGeometry,并使用DrawingContext.DrawGeometry()方法将其封装在DrawingVisual的DrawingContext中.

以下是一些应该有用的链接. 路径几何

DrawingContext.DrawGeometry()

优化性能:2D图形和成像

并使用线条组合以及由Geometry类(ArcGeometry,PathGeometry等)派生的类提供的其他东西自己绘制形状.

这应该有所帮助.