WPF 使用frame加载page内存暴涨问题 【坑】

发布时间 2023-04-04 08:46:38作者: 小林野夫

发现问题

最近做的WPF的项目,项目框架使用的是window窗口中使用frame嵌入page,实现页面的切换,属于前辈自己写的简单框架小项目用起来也不错,不过程序后期测试发现页面内容比较多的时候(后来发现可能是页面使用了后台生成页面内容造成的),频繁切换内存呈指数增长?,程序打开时90+M,频繁操作后接近500MBG?。原始代码如下:

internal partial class MainWindowsViewModel : ViewModelBaseN
{ 
 public MainWindowsViewModel()
        {
      } 
[RelayCommand]
 private void SelectionChanged(object[] obj)
 {
  var listbar = obj[0] as ListBox;
            var SelectedItem = listbar.SelectedItem as NavButton;
            var frame = obj[1] as Frame;
           
          frame.Navigate(SelectedItem.NavLink);//导致内存暴涨
}
}


 页面跳转是通过NavigationService来控制的,
在Frame和Page中都有该名为NavigationService的对象,
可以通过它的Navigate函数来实现页面跳转。
 例如前面在Frame中设置Source = "Page1.xaml"实际上就是通过如下函数实现的跳转:
frame.NavigationService.Navigate(new Uri(SelectedItem.NavLink, UriKind.Relative));

因此每次点击按钮 进行页面切换时,就等于新建了一个页面。因此导致内存暴涨