【问题标题】:How much is the performence degradation caused by using Shapes derived objects instead of Visual derived objects使用 Shapes 派生对象而不是 Visual 派生对象导致的性能下降有多大
【发布时间】:2011-11-18 20:29:58
【问题描述】:

在创建包含数千个形状的绘图应用程序或模拟时,由于性能下降,建议使用从 Visual 派生的类(如 DrawingVisual)而不是从 Shape 派生的类。

我想知道性能下降有多少,其中大部分是由于派生类层次结构中的 FrameworkElement 类吗?应该决定使用 Visual 而不是 Shape 的阈值是多少?而在链上丢失UIElement和FrameworkElement的利弊是什么?

【问题讨论】:

    标签: .net wpf performance system.drawing


    【解决方案1】:

    Drawing 派生类的重量都轻得多,因为它们基本上只是呈现基元。除了定义它们将被绘制的区域之外,它们实际上并没有做太多事情。

    当您使用派生自Shape 的类时,所有对象都必须注册事件处理并作为标准布局系统的一部分工作,以及处理它们自己的所有呈现。这不会对少量对象产生巨大影响,但是当您添加更多对象时,布局传递和事件处理确实会对整体性能产生很大影响。

    我想知道性能下降有多少,大部分是由于派生类层次结构中的 FrameworkElement 类造成的?

    几乎所有这些 - 它派生自 FrameworkElement 的事实意味着 Shape 必须处理所有布局、事件和渲染,这就是它变慢的全部原因。

    以及应该决定使用视觉而不是形状的阈值是多少?而在链上丢失UIElement和FrameworkElement的利弊是什么?

    衡量,看看你的门槛在哪里...很大程度上取决于你在做什么,以及你如何使用这些类型。

    获取更多详细信息的好资源是 MSDN 上 WPF Performance Optimization 页面的 Drawings and Shapes 部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      相关资源
      最近更新 更多