发现问题
最近做的WPF的项目,项目框架使用的是window窗口中使用frame嵌入page,实现页面的切换,属于前辈自己写的简单框架小项目用起来也不错,不过程序后期测试发现页面内容比较多的时候(后来发现可能是页面使用了后台生成页面内容造成的),频繁切换内存呈指数增长👆,程序打开时60+M,频繁操作后接近1G😱。原始代码如下:
page code
前台
<Grid>
<Frame x:Name="frame1" NavigationUIVisibility="Hidden"></Frame>
</Grid>
后台
frame1.Navigate(new page());
解决过程
发现这个问题各种百度,CSDN基本判断是内存溢出/泄漏,网上找到了不少相关的解决方案,仅描述个人认为最有效方案:
删除历史导航
引用原文“frame有一个RemoveBackEntry()方法,可以把历史导航里的前一条记录给删掉,这样就OK了,在每次载入一个page时,加入一个RemoveBackEntry()语句,就可以把前面记录的page删掉,这样内存就不会上涨了。”
使用Frame.RemoveBackEntry()方法。
只需要修改窗口代码
if (mainFrame.BackStack != null)
{
while (mainFrame.CanGoBack)
{
mainFrame.RemoveBackEntry();
}
System.GC.Collect();
}
测试结果
这招最简单。