如何提高ContentControl的卸载性能

时间:2017-06-01 10:34:38

标签: c# wpf

我正在使用MVVM和ViewModel-First方法开发WPF应用程序。 ViewModel-First中常见的页面导航方式是将ViewModel设置为ContentControl的内容。通过使用DataTemplates,可以呈现正确的视图。

当要替换的视图具有复杂的可视树时,替换ContentControls内容可能会导致性能问题。它需要卸载,这意味着整个树被递归清理。这在blogpost中有详细解释。我注意到这取决于设备,但最多可以在10秒内卸载复杂的页面。

我目前已找到2个解决此问题的方法:

  1. 使用较小的视图或使用虚拟化控件:通过将视图拆分为不同的页面或使用TabControl,可以(部分)解决问题。但问题仍然存在,View什么时候变得太大了?
  2. 使用包含所有先前页面的 ItemsControl ,因此无需卸载。建议使用此解决方案herehere。对于遍历Visual和Logic树的代码,此解决方案可能存在缺点,并且可能会导致其他性能问题,因为所有先前的视图都存储在内存中。
  3. 卸载ContentControl的性能是否可以在不产生上述解决方案的情况下得到改善?

0 个答案:

没有答案