Prism的RegionManager视图切换性能

Koe*_*enJ 8 wpf performance prism

我正在对使用 PRISM 库编写的 WPF 应用程序进行性能分析。在此应用程序中,从一个视图导航到另一视图特别慢,尤其是在远离“重”视图时。注意:

  • 来回导航时视图会被缓存并且不会重新构建
    (PRISM 将所有视图保留在 SingleActiveRegion 中的结果)
  • 我知道由于 xaml 解析、JIT'ing 等原因,第一次构建视图可能会很慢。但是这个问题是关于导航仍然很慢,即使是在第一次打开视图之后

使用 PRISM 库,区域通常在 ContentControl 上实现,例如:

<ContentControl regions:RegionManager.RegionName="MAIN" />
Run Code Online (Sandbox Code Playgroud)

因此,在 MAIN 区域中切换视图将更新此 ContentControl 的“内容”(从源代码中可以看出)。将 UI 元素设置和切换为 ContentControl 的“内容”会对性能产生副作用(请参阅此博文)。

为了克服这种行为,我为网格实现了一个自定义RegionAdapterBase ( CachingGridRegionAdapter.cs ),它基本上添加了作为子项导航的所有视图,并隐藏了所有非活动视图。

性能提升是巨大的;现在,从一个视图导航到另一个视图是即时的。问题:这种方法有什么缺点吗?

  • 就内存而言,我没有看到问题,因为无论如何所有视图都被 PRISM 保存在内存中
  • 拥有一个大的视觉树,其中许多部分具有“可见性”=“折叠”,是否有缺点?


如果还有其他方法可以解决这个问题,请告诉我。


感谢您抽出时间,
科恩