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 个原因:

  1. 你是运行一棵非常复杂的视觉树(那么玩弄可见性而不是替换显示区域的全部内容可能更聪明)。
  2. DevExpress 控件有问题(可能配置错误?)。那么最好联系他们的支持。