绑定或视觉状态方法是否优于性能?

时间:2013-08-16 19:12:59

标签: performance xaml binding visualstates

假设我有一个大的XAML页面。在这个页面上有几十个文本框,按钮等,这些控件需要根据各种条件(权限,视图模型状态,等等)显示/隐藏/修改。设置视觉转换的两种可能方法是:

  1. 使用可视状态管理器; bind the state transitions视图模型中的属性
  2. 将控件属性绑定到各自的视图模型属性,使用适用的转换器(bool-to-visibility,string-to-color等)
  3. 我的问题:纯粹从性能(速度和内存占用)的角度来看,一种或另一种方法明显更好吗?是第二种方法,加载带有绑定的页面,是否有可能权衡它?或者差异可能微不足道?

1 个答案:

答案 0 :(得分:1)

我没有测试或基准来证明它,但如下推理表明视觉状态方法应该更快。

对于绑定方案:

  • 视图中的每个绑定都会导致触发事件处理程序,每次都会引发PropertyChanged
  • 这些处理程序中的每一个都必须时间执行任何视图模型属性更改。
  • 同样,当您更改视图模型属性以更新视图的配置时, all 必须为您更改的每个属性运行处理程序。

可视状态场景中没有这些处理程序可以通过:

  • VisualStateManager没有处理程序,因此在不需要时它不消耗任何CPU(它忽略“PropertyChanged”,或者在最坏的情况下,只有一个侦听器附加到“CurrentState”属性)。
  • 要触发可视状态,只需要运行附加的Storyboard - PropertyChanged不会被提升(除了上面一次,最多可能一次),因此所有处理程序都不需要多次运行。 / LI>

使用Visual State Manager显然比使用视图到视图模型绑定设置更多。


编辑 John Gossman也noted(很久以前)绑定可能很重,并且可能开始在大型应用程序中消耗过多的内存。在链接的文章中,他声称通过用一个静态回调替换所有绑定来节省了100MB。