切换视图时的Catel / WPF性能

时间:2015-12-16 22:10:12

标签: wpf devexpress catel

我的应用程序的视图切换性能有问题。

我有一个预先创建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.2秒时看起来非常糟糕。

//编辑:

每个模块都存在延迟。在更复杂的视图(即使用DevExpress控件)上似乎更长

EDIT2: 我已经分析了我的应用程序,似乎包含DevExpress Scheduler的最长加载模块在这些方法上有一个热点:

DevExpress.Xpf.Scheduler.Drawing.SharedSizePanel.MeasureOverrideCore()
DevExpress.Xpf.Core.DXBorder.MeasureOverride()

有没有办法减少它?

1 个答案:

答案 0 :(得分:0)

我认为这可能与DevExpress控件有关,它们测量了它们有多少空间以及它们需要多少空间。尝试使用仍在使用Catel的空视图。如果是,则使用LogManager.AddDebugListener()启用Catel中的详细日志记录以检查日志记录。

如果问题消失,可能有两个原因:

  1. 您正在运行一个非常复杂的可视化树(然后使用可见性而不是替换显示区域的整个内容可能更聪明。)
  2. DevExpress控件存在问题(可能配置错误?)。然后最好联系他们的支持。