我是移动开发的新手,并且是Xamarin。我一直注意到的一件事是,每次加载页面时,人们总是要求创建一个new page()
,而不是拥有一个池或设置他们可以访问的页面列表。
这不会引起内存问题吗? Xamarin是否会自动从范围中删除较旧的页面?抱歉,这听起来像是一个愚蠢的问题,但这是让我失望的事情,因为我作为程序员的初衷通常是为了限制内存中不必要的数据重复。
答案 0 :(得分:2)
Xamarin是基于.NET的技术,因此内存管理基于垃圾回收。因此,如果您遵循良好做法,则应该在某个时候对垃圾回收不再使用的生成页面进行
。答案 1 :(得分:1)
这是一个好问题。如果您在页面导航中遇到内存泄漏,可以先查看this document。
NavigationPage类提供了分层的导航体验,用户可以根据需要在页面之间进行向前和向后导航。该类将导航实现为Page对象的后进先出(LIFO)堆栈。
因此,您可以在浏览页面时看到所有页面都在堆栈中。简而言之,xamarin在推入堆栈时在内部处理其内存释放。
如果您仍然担心内存泄漏,可以参考Xamarin.Forms App Lifecycle来根据页面生命周期的结束手动释放对象。
关于在堆栈中导航时明确调用垃圾回收器
这是一个有争议的。有人说您永远不应显式调用垃圾回收器。而且,总的来说,我会同意这一点。但是,在Xamarin中,对GC.Collect()
的魔术调用可能会造成混乱。如果没有其他帮助,只需在致电GC.Collect();
之后立即致电await _navigation.PopAsync(true)
。