首页 文章

改善WPF Canvas性能

提问于
浏览
8

我正在使用WPF开发类似 Map 的应用程序 . 我有~10,000个PathGeometry,Shapes被添加到画布中 . 我添加了ScaleTransform和TranslateTransform用于缩放和平移控件 .

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

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

3 回答

  • 6

    我建议您看看这篇有趣的文章,其中包含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等)派生的类提供的其他内容自己绘制形状 .

    这应该有所帮助 .

  • 7

    如果您希望在WPF中立即绘图的最佳性能,请查看WriteableBitmapEx . 这是一个优秀的开源库,我最近做出了贡献 . 它在WriteableBitmap上提供类似GDI的绘图功能,并与Windows Phone,WPF和Silverlight兼容 . API很简单,你可以得到blitting,多边形,线条和简单的形状......但是你不会得到datatemplates和渐变画笔 .

相关问题