容器嵌套在XAML中会影响渲染性能吗?

时间:2013-11-12 12:55:54

标签: c# .net wpf performance xaml

当WPF应用程序的XAML包含嵌套GridStackPanelDockPanel和其他容器的批次时,渲染性能是否会严重降低?

3 个答案:

答案 0 :(得分:2)

当您创建一个非常复杂的UI,包含大量嵌套对象和包含大量元素的DataTemplate时,您可以严重影响App的性能,因为UI树越大,渲染所需的越大,以及框架无法在30FPS中呈现,您将开始看到性能下降。你应该使用你需要的最轻量级的面板,以避免你不需要的额外逻辑。以下是一些性能提示,以便让您更快地使用App:

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

答案 1 :(得分:2)

答案真的很简单"是"。更多的东西将使用更多的处理器时间。 SURPRISE!

在WPF的情况下,元素被排列成分层场景图。为此图表添加深度级别会比将兄弟节点添加到现有元素更慢。你应该始终努力保持低图的深度。请考虑使用Grid而不是嵌套StackPanel s。

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

  1. 布局依赖关系 - 如果重新调整父级的大小,则可能会重新渲染子级。
  2. 遮挡 - 如果2个元素重叠,则使一个元素无效通常会使另一个元素无效。
  3. 递归 - 大多数图形操作都是 CPU绑定 - 它们完全依赖于CPU速度而没有专用硬件支持(渲染器尽可能使用您的图形芯片)。循环浏览图表的级别以获取资源和布局更新是非常昂贵的。
  4. 关于遮挡,BitmapCache类可以帮助很大!

答案 2 :(得分:0)

WPF使用MeasureOverrideArrangeOverride方法来呈现UIElements。 MeasureOverride根据父控件的宽度和大小测量UIElements的宽度和大小。 ArrangeOVerride方法将根据这些度量在运行时安排UIElements。这些方法经过优化,可以提高性能,不会导致任何渲染性能问题。

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

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

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

相关问题