【发布时间】:2012-03-30 16:23:16
【问题描述】:
很多时候,不止一个面板适合我想要的布局,但是我知道不同面板类型的渲染时间存在差异。
例如,MSDN 声明
一个比较简单的
Panel,比如Canvas,可以显着 比更复杂的Panel性能更好,例如Grid。
那么就渲染时间和性能而言,WPF 面板按什么顺序最高效?
WPF 面板:
CanvasDockPanelGridUniformGridStackPanelWrapPanel-
VirtualizingPanel/VirtualizingStackPanel
我很确定我在网上某处看到了这个列表,但我现在找不到。
我正在寻找的理想答案会按照它们呈现最快的顺序为我提供一个面板列表。我知道孩子的数量是面板效率的一个重要因素,所以为了这个问题,假设每个面板只有一个 Label/TextBox 对。
此外,我想要一个例外列表,例如在某些条件下表现优于其他面板的特定面板。
更新
根据下面的accepted answer总结,面板性能是基于子项的数量和布局,但总体上从最快到最慢的列表是:
CanvasStackPanelWrapPanelDockPanelGrid
此外,如果有很多项目并不总是适合屏幕,则应始终使用VirtualizingPanel / VirtualizingStackPanel。
我强烈建议您阅读下面的accepted answer 了解更多详细信息,然后再从该列表中选择一个项目。
【问题讨论】:
-
假设虚拟化面板总是比非虚拟化面板表现更好是不是太天真了?
-
@BoltClock 我认为这取决于面板中有多少不可见的内容。如果有很多不可见的项目,
VirtualizingStackPanel肯定会表现得更好,但如果面板中显示的所有项目都是可见的,我认为使用常规面板更好。 -
谢谢。确实有道理,将项目虚拟化是一种浪费,因为无论如何它们都会显示。
-
除了虚拟化之外,它们具有不同的功能,否则它们将不是单独的控件。我选择为客户提供最佳 UI 的东西。
-
你确定有明显的区别(除了虚拟化)吗?他们所要做的就是执行一个相对轻量级的布局算法。与接下来的所有渲染相比,微不足道。话虽如此,网格可能是最慢的(加权缩放)。
标签: wpf performance rendering panel