【问题标题】:Improving WPF Canvas performance提高 WPF 画布性能
【发布时间】:2011-09-26 20:25:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: wpf performance wpf-controls maps scaletransform


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      你在画布上放什么东西?如果使用 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 等)派生的类提供的其他东西。

      这应该会有所帮助。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-11-15
          • 2021-10-14
          • 1970-01-01
          • 2013-04-17
          • 1970-01-01
          • 2021-12-10
          • 2017-01-04
          • 2013-06-15
          相关资源
          最近更新 更多