在创建包含数千个形状的绘图应用程序或模拟时,建议使用从Visual派生的类(如DrawingVisual)而不是由于性能下降而从Shape派生的类. 我想知道性能下降了多少,并且由于派生类层次结构中的
我想知道性能下降了多少,并且由于派生类层次结构中的FrameworkElement类而占大多数?除了使用Visual而不是Shape之外应该决定的阈值是多少?在链中丢失UIElement和FrameworkElement的优缺点是什么?
Drawing派生类的重量都要轻得多,因为它们基本上只是渲染基元.除了定义它们将被绘制的区域之外,它们实际上并没有做太多.当您使用从Shape派生的类时,对象都必须注册事件处理并作为标准布局系统的一部分工作,以及处理所有自己的渲染.这对几个对象没有太大影响,但随着您添加更多,布局通过和事件处理确实会对整体性能产生很大影响.
I want to know how much is the performance degradation and is majority of it due to FrameworkElement class in the hierarchy of derived classes?
几乎所有这一切 – 它派生自FrameworkElement这一事实意味着Shape必须处理所有的布局,事件和渲染,这是它变慢的全部原因.
And what is the threshold beyond which one should decide using Visual instead of Shape? And what are the pros and cons of losing UIElement and FrameworkElement in the chain?
测量,看看阈值在哪里…很大程度上取决于你在做什么,以及你如何使用这些类型.
获取更多详细信息的一个很好的资源是MSDN上WPF Performance Optimization页面的Drawings and Shapes部分.