Catel/WPF 切换视图时的性能
Catel/WPF performance while switching view
我的应用程序的视图切换性能有问题。
我有一个模块,它预先创建了 View 和 ViewModel,例如:
public void InitializeModule()
{
this.Presenter = ViewHelper.ConstructViewWithViewModel<TView>(typeof(TView), new TViewModel());
this.ViewModel = (TViewModel)this.Presenter.DataContext;
}
然后,我通过 ActiveView 在屏幕上显示它,例如:
<ContentPresenter
Margin="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Content="{Binding ActiveView.Presenter}" />
问题是,在激活视图和显示视图之间存在延迟。
更改视图只是将 ActiveView 替换为另一个预先创建的模块。
我检查过,View 和 ViewModel 的构造函数只有一次 运行。而且这些变化之间没有什么大的逻辑。
请问是什么原因造成的?当我切换到另一个视图时有 ~0.2s 的延迟时,它看起来非常糟糕。
//编辑:
每个模块都存在延迟。它似乎在更复杂的视图上更长(即使用 DevExpress 控件)
编辑2:
我已经分析了我的应用程序,似乎最长的加载模块(包含 DevExpress Scheduler)在这些方法中有一个热点:
DevExpress.Xpf.Scheduler.Drawing.SharedSizePanel.MeasureOverrideCore()
DevExpress.Xpf.Core.DXBorder.MeasureOverride()
有没有办法减少它?
我认为这可能与 DevExpress 控件有关,该控件衡量他们拥有多少 space 以及他们想要多少 space。尝试将其与仍在使用 Catel 的空视图一起使用。如果是,则使用 LogManager.AddDebugListener()
在 Catel 中启用详细日志记录以检查日志记录。
如果问题消失,可能有 2 个原因:
- 你是运行一棵非常复杂的视觉树(那么玩弄可见性而不是替换显示区域的全部内容可能更聪明)。
- DevExpress 控件有问题(可能配置错误?)。那么最好联系他们的支持。
我的应用程序的视图切换性能有问题。
我有一个模块,它预先创建了 View 和 ViewModel,例如:
public void InitializeModule()
{
this.Presenter = ViewHelper.ConstructViewWithViewModel<TView>(typeof(TView), new TViewModel());
this.ViewModel = (TViewModel)this.Presenter.DataContext;
}
然后,我通过 ActiveView 在屏幕上显示它,例如:
<ContentPresenter
Margin="0"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Content="{Binding ActiveView.Presenter}" />
问题是,在激活视图和显示视图之间存在延迟。
更改视图只是将 ActiveView 替换为另一个预先创建的模块。
我检查过,View 和 ViewModel 的构造函数只有一次 运行。而且这些变化之间没有什么大的逻辑。
请问是什么原因造成的?当我切换到另一个视图时有 ~0.2s 的延迟时,它看起来非常糟糕。
//编辑:
每个模块都存在延迟。它似乎在更复杂的视图上更长(即使用 DevExpress 控件)
编辑2: 我已经分析了我的应用程序,似乎最长的加载模块(包含 DevExpress Scheduler)在这些方法中有一个热点:
DevExpress.Xpf.Scheduler.Drawing.SharedSizePanel.MeasureOverrideCore()
DevExpress.Xpf.Core.DXBorder.MeasureOverride()
有没有办法减少它?
我认为这可能与 DevExpress 控件有关,该控件衡量他们拥有多少 space 以及他们想要多少 space。尝试将其与仍在使用 Catel 的空视图一起使用。如果是,则使用 LogManager.AddDebugListener()
在 Catel 中启用详细日志记录以检查日志记录。
如果问题消失,可能有 2 个原因:
- 你是运行一棵非常复杂的视觉树(那么玩弄可见性而不是替换显示区域的全部内容可能更聪明)。
- DevExpress 控件有问题(可能配置错误?)。那么最好联系他们的支持。