关于WPF中Frame使用新Page切换内存上涨问题

编程开发
220
WPF
Frame
Page
内存暴涨

关于WPF中Frame使用Page切换内存上涨问题

最开始入行是做web开发的,刚接触wpf桌面开发项目的时候写过一个自助的桌面客户端,一堆花里胡哨的界面,页面切换采用了Frame内嵌Page的方式开发(因为和web比较相似就选了这种)

这里就分享一个初学者容易忽视的Frame嵌入Page使用内存问题 大概描述下遇到的情况

小伙伴反馈客户端运行一段时间后 客户端程序会自动崩溃,但远程盯了几个小时程序也没见程序异常退出,最开始以为是偶发性的系统故障就没理他,但是连续出了好几次,最终一次运气不错在小伙伴还没关掉崩溃的程序提示时看到了系统内存爆满

最后排查出来的原因居然是 Frame如果以new Page()的方式加载 后切换其他的新页面时 原来的内存并不会释放,也就是只要触发 Frame 加载新页面内存就会一直往上涨

因为单个页面内存占用并不高 所以平时测试也看不太出来,但是放到客户场地运行一段时间后 内存就不够用了(我这里触发条件是以用户点击加载新页面 然后点了一周系统内存就不够了)

解决办法:

切换页面不要每次都重新实例化一个新page,每个页面对应定义一个静态或者公用的参数

WPF实现窗体接收鼠标拖拽的文件例子
一次使用AutoResetEvent的经历:在Task并发环境下导致UI线程卡死 内存一直上涨
WPF桌面程序开发怎么实现鼠标窗体穿透点击桌面
在.NET CORE\.NET 5 下WPF如何实现托盘图标功能
WPF中某一个控件绑定其他指定UI控件的属性值
.NET 5 WPF 如何开启控制台界面用于实时输出日志
.NET程序系统托盘运行出现多个同样的托盘图标的解决方法
Windows桌面开发优秀的WPF界面开源UI组件 MahApps.Metro
WPF 设置程序不允许同一类程序多开进程
WPF引用CommunityToolkit.Mvvm实现属性变动双向绑定的简单例子
WPF使用popup控件实现弹出式提示
WPF文本框控件RichTextBox实现MVVM绑定数据源
暂无相关内容...
C#+WPF实现模仿实现的网易云音乐客户端源码
WPF实现的自定义工作大日历排班Calendar控件模板的例子源码
wpf实现大屏幕弹幕播放效果特效源码新手可参考下.rar
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
WPF实现读取USB摄像头实时视频展示以及导出实时截图的C#源码例子
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删