1

如果 WPF 应用程序的 XAML 包含大量嵌套GridStackPanelDockPanel和其他容器,渲染性能是否会严重下降?

4

3 回答 3

3

真正的答案是“是”。更多的东西将使用更多的处理器时间。惊喜!

在 WPF 的情况下,元素被排列成一个分层的场景图。与向现有元素添加同级元素相比,向该图添加深度级别会降低您的应用程序的速度。您应该始终努力保持图表的深度较低。考虑使用Grid而不是嵌套StackPanels。

那么为什么深度比原始元素计数更重要呢?好吧,深度通常意味着;

  1. 布局依赖 - 如果调整父级的大小,则可能会重新渲染子级。
  2. 遮挡 - 如果 2 个元素重叠,使一个元素失效通常会使另一个元素失效。
  3. 递归 - 大多数图形操作都受 CPU 限制- 它们完全取决于 CPU 速度并且没有专用的硬件支持(渲染器尽可能使用您的图形芯片)。循环遍历图表的各个级别以获取资源和布局更新是昂贵的。

关于遮挡,该BitmapCache课程可以提供很大帮助!

于 2013-11-12T14:01:40.163 回答
2

当你创建一个非常复杂的 UI,包含大量嵌套对象和包含大量元素的 DataTemplate 时,你会严重影响 App 的性能,因为 UI Tree 越大,渲染所需的时间就越大,如果框架不能以 30FPS 渲染,您将开始看到性能下降。您应该使用您需要的最轻量级的面板,以避免不必要的额外逻辑。以下是一些性能提示,以使您的应用程序更快:

http://msdn.microsoft.com/en-us/library/bb613542(v=vs.110).aspx

于 2013-11-12T13:47:54.957 回答
0

WPF 使用MeasureOverrideArrangeOverride方法来呈现 UIElements。MeasureOverride根据父控件的宽度和大小测量 UIElements 的宽度和大小。ArrangeOVerride方法将根据这些措施在运行时安排 UIElements。这些方法针对更快的性能进行了优化,不会导致任何渲染性能问题。

但是应该有一个容量,这些方法可以在最短的时间内处理 UIElements。如果超过此限制,则应该存在性能问题。

例如:假设一辆自行车可以载 2 个人。如果 5 人超载会发生什么:)

Jet Brains .Trace 是一种分析性能问题的工具,有助于了解这两种方法

于 2013-11-12T13:11:49.123 回答