Xamarin Forms调用GoToAsync跳转页面返回终止是否存在内存泄漏风险
单看你给出的Xamarin Shell导航代码,本身是官方推荐的标准写法,正常场景下不会直接导致内存泄漏。
你可以先明确几个基本逻辑:
- Xamarin Shell的默认导航栈机制下,点击返回按钮执行出栈操作时,只要没有其他外部对象持有
SearchPage或其绑定的BindingContext实例的强引用,页面、对应视图模型都会被GC正常回收,不会残留在内存中。 - 你现在的返回逻辑符合预期,说明Shell的导航栈工作是正常的,不用因为这段导航代码本身担心泄漏问题。
需要额外留意可能引发内存泄漏的场景和你的代码无关,主要集中在SearchPage自身的实现上:
- 如果
SearchPage内部订阅了事件,比如MessagingCenter消息、静态类事件、长生命周期服务的事件,但没有在页面销毁/出栈时取消订阅,这是Xamarin开发中最常见的页面内存泄漏诱因。 - 如果
SearchPage绑定的视图模型持有长生命周期的注入服务、未释放的非托管资源、或者全局静态对象的引用,也会导致页面实例无法被正常回收。 - 补充说明:你写的
async void是事件处理器的合法写法,唯一要注意的是方法内部如果抛出未捕获的异常会直接导致进程崩溃,这个问题和内存泄漏无关。
如果要完全确认没有泄漏,可以用Visual Studio自带的内存分析工具,多次进出SearchPage后抓取内存快照,搜索是否有残留的SearchPage实例即可。
内容的提问来源于stack exchange,提问作者Mathematician
相关产品推荐
相关产品推荐

