为啥在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中?

Posted

技术标签:

【中文标题】为啥在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中?【英文标题】:Why loading AssetBundle to memory after downloading and unpacking results crash in iPad due to lack of Memory?为什么在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中? 【发布时间】:2018-04-26 09:45:55 【问题描述】:

我们刚刚在 Unity 2D 中完成了一款 2D 游戏,但正在努力解决一些与内存相关的严重问题。

使用的 Unity 版本:Unity 2017.2.2f1

我们正在使用 AssetBundles 和 On Demand Resource 下载平均大小为 20MB 的包(纹理、精灵表、bg 图像和场景)。

我们已成功将应用商店大小限制为 90MB。在 Xcode 中分析项目时,构建占用的初始内存为 180 MB。但是当我们通过 On Demand 下载任何关卡(资产包)时,问题就开始了资源。内存使用量从 180MB 跃升至 568MB。

1.为什么unity在下载加载20MB大小的AssetBundle后会消耗388MB内存?

2.为什么每次我们加载一个新场景,unity卸载场景后都会保留一些内存,即不清除分配的块?

3. RGBA Compressed PVRTC 4 bits 在 Unity 中是否适用于 ios 设备?

5.是否有任何第三方 SDK 可以压缩 Unity 的 2D 纹理和 GUI 图形?

请帮助我,以便我可以将项目交付给客户,否则我的工作有风险:(

提前致谢。

【问题讨论】:

【参考方案1】:
    检查资产包压缩以及如何加载资产包。 压缩的资产包在内存中完全解压缩,因此建议对包使用未压缩或基于块的压缩以避免内存峰值。 Unity 使用托管内存加载和卸载事物可能会导致一些内存泄漏,因为 GC 几乎控制着一切。 PVRTC 适用于所有 IOS 设备。 既然你的目标是iOS,PVRTexTool就是你所需要的PVRTexTool Download

【讨论】:

以上是关于为啥在 iPad 中由于缺少内存而在下载和解包结果后将 AssetBundle 加载到内存中?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 UIDocumentInteractionController 是不是由于 iPad 上缺少外部应用程序而无法打开文档?

关于防止内存泄漏的封包和解包

由于“缺少所需的图标文件”,无法分发 Xamarin iOS iPad 存档

为啥华为系统恢复eRecovery总是说获取安装包信息失败?

iOS中使用ZipArchive压缩和解压缩文件-备

为啥 iPhone/iPad 上的浏览​​器无法下载/预览 docx 文件?