WPF 使用frame加载page内存暴涨问题 【坑】
发现问题
最近做的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));
因此每次点击按钮 进行页面切换时,就等于新建了一个页面。因此导致内存暴涨
编程是个人爱好