2011-09-26 143 views
8

我正在开发一个使用WPF的应用程序的地图。我有〜10,000 PathGeometry,形状添加到画布。我已经为缩放和平移控件添加了ScaleTransform和TranslateTransform。提高WPF画布的性能

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

任何提示使其更有效率将有所帮助和赞赏。

回答

6

你把什么样的东西放在画布上?如果使用pathGeometry,是否将它们放在Path类中?如果是这样,Path在其超类层次结构中具有FrameworkElement,这是造成巨大性能损失的原因。

Take a look at my question here.虽然是关于Shape类,但是性能下降的原因是一样的,FrameworkElement。

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

这里有一些应该帮助的链接。 Path Geometry

DrawingContext.DrawGeometry()

Optimizing Performance: 2D Graphics and Imaging

而自己绘制的形状,利用线的组合,并且通过从Geometry类(ArcGeometry,的PathGeometry等)派生类提供其他事情。

这应该有所帮助。

2

如果你想在WPF即时绘图性能的极致,然后检查WriteableBitmapEx。这是一个优秀的开源库,我最近为它做出了贡献。它在WriteableBitmap上提供类似于GDI的绘图功能,并与Windows Phone,WPF和Silverlight兼容。该API很简单,你得到块传输,多边形的线条和简洁的造型等等......你不会得到的DataTemplates和渐变画笔但是。