人们为什么不在Xamarin中使用对象池?

时间:2019-07-23 17:34:35

标签: c# xamarin object-pooling

我是移动开发的新手,并且是Xamarin。我一直注意到的一件事是,每次加载页面时,人们总是要求创建一个new page(),而不是拥有一个池或设置他们可以访问的页面列表。

这不会引起内存问题吗? Xamarin是否会自动从范围中删除较旧的页面?抱歉,这听起来像是一个愚蠢的问题,但这是让我失望的事情,因为我作为程序员的初衷通常是为了限制内存中不必要的数据重复。

2 个答案:

答案 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)

相关问题