【发布时间】:2014-03-19 09:02:30
【问题描述】:
我正在使用非常复杂的 WPF 窗口,其中包含很多控件。 在我的上下文中,我们选择的用户体验是首先显示窗口,然后加载数据和数据绑定(同时显示进度条)。
借助 Visual Studio 中的 WPF 跟踪,我注意到在显示窗口之前调用了两次数据绑定:
- 当我们调用解析 XAML 的 InitializeComponent() 时。
- 当我们调用 ShowDialog() 时。
由于还没有数据,数据绑定机制需要相当长的时间来尝试回退和默认值。
为了加快向用户显示窗口的速度,有没有办法在显示窗口之前禁用 WPF 数据绑定?
提前致谢。
编辑 1 : 我在表单上有超过 400 个控件。对 InitializeComponent() 的调用需要 700 毫秒才能完成。我不知道其中有多少与数据绑定有关,可能是我弄错了。
编辑 2 : 根据 dotTrace 分析器,InitilizeComponent() WPF 成本为 65.43%,分为:
- 34.25% 系统.Windows
- 22.57% System.Windows.Markup
- 8.29% 其他
编辑 3 : InitializeComponent() 的时间缩短到 272 毫秒。 我们有很多转换器,singletons 现在用于所有转换器。
【问题讨论】:
-
能否提供每个阶段的毫秒数?
-
参见 EDIT 1 了解 InitializeComponent。 ShowDialog 在表单关闭之前不会返回,这可能有点难以衡量。