.net - 使用Shapes派生对象代替Visual派生对象造成的性能下降有多大

标签 .net wpf performance system.drawing

在创建包含数千个形状的绘图应用程序或模拟时,由于性能下降,建议使用派生自 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?



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

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

关于.net - 使用Shapes派生对象代替Visual派生对象造成的性能下降有多大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7447802/

相关文章:

sql-server - 设计表以支持使用 sql server 更快地更新一个字段的最佳实践

javascript - 如何重用 JQuery 事件?

performance - 保留历史记录和当前概览

c# - 是否可以限制或限制可从 DLL 执行的 C# 代码的范围?

c# - 将自定义命名空间添加到 WCF 中的 soap 信封

c# - Mode=TwoWay 返回 Null

c# - 在 DataGrid.ItemsSource 更改后保持对一行的关注

c# - 打印预览 C# 中的居中图像

c# - 使用或不使用程序集重定向都找不到 F# Core 方法。我还可以做些什么?

c# - DataGrid只选择一行中的单元格