我有一个WPF应用程序(.NET 4),它有一个主窗口,在该主窗口内显示许多较小的UserControls。用户执行的各种操作导致显示的UserControls被不同的其他控件替换,这些控件具有不同的数据。
然而,当切换这些控件时,我遇到了性能问题。加载控件时,WPF调度程序线程的CPU占用率达到100%。在旧机器上或者有大量控件时,这可能导致应用程序看起来锁定长达30秒!
分析表明,几乎所有的CPU时间都花费在调用各种UserControls的InitializeComponent方法上,没有一个控件比其他控件更糟糕,它们似乎都需要0.2到0.5秒(在我的开发机器上,它配备了快速处理器和良好的显卡)。
据我所知,InitializeComponent是WPF实际将编译后的xaml加载到内存中的地方。
我不知道该怎么办。我想在后台线程上预初始化一些东西,但所有的WPF控件必须在调度程序线程上创建和使用,因此我认为这是不可能的。
否则,看起来我唯一的选择就是删除所有的xaml?
非常感谢您的帮助。
然而,当切换这些控件时,我遇到了性能问题。加载控件时,WPF调度程序线程的CPU占用率达到100%。在旧机器上或者有大量控件时,这可能导致应用程序看起来锁定长达30秒!
分析表明,几乎所有的CPU时间都花费在调用各种UserControls的InitializeComponent方法上,没有一个控件比其他控件更糟糕,它们似乎都需要0.2到0.5秒(在我的开发机器上,它配备了快速处理器和良好的显卡)。
据我所知,InitializeComponent是WPF实际将编译后的xaml加载到内存中的地方。
我不知道该怎么办。我想在后台线程上预初始化一些东西,但所有的WPF控件必须在调度程序线程上创建和使用,因此我认为这是不可能的。
否则,看起来我唯一的选择就是删除所有的xaml?
非常感谢您的帮助。