WPF InitializeComponent性能问题

Ori*_*rds 7 c# wpf performance

我有一个WPF应用程序(.NET 4),它有一个主窗口,在主窗口内部显示许多较小的窗口UserControls.用户执行的各种动作导致UserControls显示的动作被具有不同数据的不同其他控件替换.

但是,在切换这些控件时,我遇到了性能问题.在加载控件时,WPF调度程序线程转到100%CPU.在较旧的计算机上,或者控件数量较多时,这可能会导致应用程序锁定长达30秒!

分析表明几乎所有这些CPU时间花在调用InitializeComponent所有不同的各种方法上UserControls- 没有一个控件看起来比其他任何方法差得多,它们似乎都需要0.2到0.5秒(在我的开发机器上快速处理器和良好的图形卡).

据我所知,InitializeComponentWPF实际上将已编译的xaml加载到内存中.

我在这里做什么都不知所措.我想在后台线程上预先初始化东西,但是必须在调度程序线程上创建和使用所有WPF控件,所以我认为这不可行.

否则它看起来像我唯一的选择是删除我的所有xaml?

任何帮助将不胜感激

Dea*_*alk 0

InitializeComponent方法需要时间,因为它需要将控件插入视觉/逻辑树中并确保所有绑定、主题、预期资源等。

我唯一的建议是 - 是否可以从一开始就初始化所有潜在的控件,然后在需要时使用该Visibility属性显示/隐藏它们?

您可以使用 Freezable 缓存一些 UI,但如果它们是用户控件,那么您很可能希望用户与它们交互。