【发布时间】:2017-05-18 06:24:58
【问题描述】:
我正在开发一款游戏,该游戏在某些加载情况下会出现一些问题(卡顿了一下)。
如果我启动手机或删除/重新安装游戏,就会出现问题。如果我杀死应用程序并重新打开,那么问题就消失了,这让我相信它们发生在游戏资产被加载到 RAM 中时。当我杀死应用程序时,内存变得不活跃,但如果我重新打开游戏,它仍然可以快速加载。
我需要一种清理 RAM 的方法,以便快速重现故障,也就是说,比重新启动手机或重新安装应用程序更快。
我试图做一个trick involving holding the wake button then home button,但这显然只会杀死所有应用程序并且不会擦除内存。
我还尝试使用this project,它使用malloc 和memset 来清理内存,直到它崩溃(分配并擦除更多内存,直到它崩溃),但它不会清理我关闭的游戏使用的内存.我的印象是 iOS 会从我的游戏之前使用的应用程序中释放非活动内存,因此内存分配应用程序永远不会有机会使用我的游戏的非活动内存,因为它首先被杀死。
因此,我想了解 iOS 如何选择要使用的非活动内存以及如何使我的应用程序的非活动内存从 RAM 中清除。
请注意,我不是想在玩游戏时找到一种释放内存的方法,也不是想减少游戏使用的内存,而是想清除游戏使用的内存在游戏关闭之后,所以我打开游戏的次数是 100%。
我使用的是 iPhone 6,iOS 10.3.2。
【问题讨论】:
-
您将不得不创建多个项目应用程序来吸收内存以将您的游戏应用程序内存从堆栈中缓存出来......这听起来很像Android如何使用内存来关闭应用。还在使用 Unity?.. 应该不会太难做.. 只需加载一些 4K 纹理。知道您遇到了什么样的“加载情况”会更有趣。
-
为什么我必须创建多个应用程序?
-
因为,它会像你描述的那样缓存它们..如果你继续尝试加载同一个..它只是从后台加载它
-
我明白了。但是 iPhone 6 有 1GB 的 RAM,吸收内存的应用程序占用 645MB,iOS 和其他一切使用大约 150MB。剩余内存为 205MB,而游戏最多使用 580MB,这意味着游戏使用的大部分内存必须由内存应用程序擦除,所以我想我会再次看到问题。
-
也许,也许不是......也许在你最初的“加载”之后发生了某种缓存,在随后的读取中不会再次发生......所以你只看到这个问题初始载荷。 (?)