8

我正在使用 WPF 开发类似地图的应用程序。我有 ~10,000 PathGeometry, Shapes 添加到画布。我为缩放和平移控件添加了 ScaleTransform 和 TranslateTransform。

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

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

4

3 回答 3

7

我建议你看看这篇有趣的文章,其中包含 Virtual Canvas: ZoomableApplication2: A Million Items的概念。它还有一个在线的现场 (xbap) 演示。

于 2011-09-26T20:52:35.170 回答
6

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

看看我的问题here。虽然是关于Shape类,但是性能下降的原因是一样的,FrameworkElement。

如果这样做,解决方案是改用 PathGeometry,并使用 DrawingContext.DrawGeometry() 方法将其包含在 DrawingVisual 的 DrawingContext 中。

以下是一些应该有所帮助的链接。 路径几何

DrawingContext.DrawGeometry()

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

并自己绘制形状,使用线条的组合,以及从几何类(ArcGeometry、PathGeometry 等)派生的类提供的其他东西。

这应该会有所帮助。

于 2011-09-27T02:25:51.943 回答
2

如果您想要在 WPF 中立即绘制的终极性能,请查看WriteableBitmapEx。这是一个优秀的开源库,我最近为它做出了贡献。它在 WriteableBitmap 上提供类似 GDI 的绘图功能,并与 Windows Phone、WPF 和 Silverlight 兼容。API 很简单,您可以获得 blitting、多边形、线条和简单的形状等……但是您不会获得数据模板和渐变画笔。

于 2011-12-22T16:59:41.290 回答