android - 在 Unity Android/iOS 中高效存储大量图像

标签 android ios unity-game-engine architecture storage

我正在考虑如何解决以下问题的架构决策:

使用Unity开发的移动应用程序定期服务器接收图像。 为了允许快速重新加载重复出现的图像,我希望在客户端持久缓存尽可能多的这些图像。 图像不需要受到保护,并且应用程序外部的用户可以查看。 目前,我通过将下载的图像存储在 SD 卡上来实现此目的。 通过这种方法,我有以下担忧:

  • 大量小文件可能会降低手机和/或应用程序的速度;据我了解,许多小文件对内存健康状况的影响比一个大文件更糟糕(?)
  • 删除过时的镜像以保留可用磁盘内存似乎相当困难

我想到的一件事是使用SQLite来存储图像,但是,我了解到,不建议在数据库中存储大量 blob。 我可以存储图像的文件路径,我的第二个问题将通过这种方式得到解决,但第一个问题仍然存在。

无法将图像预先打包到资源文件夹中,它们将始终在运行时从服务器接收

我的担忧是否正确?面对此问题时的最佳做法是什么?

问候并非常感谢,

码海

最佳答案

我不确定许多文件对内存健康状况的影响,但我想到了一些建议:

  • 您可以在将图像写入磁盘时对其进行gzip压缩,并在使用前对其进行gunzip以减少空间

  • 为了管理旧图像的删除,也许您可​​以创建一个“垃圾收集”任务,该任务定期运行以修剪最旧的照片,以便低于最大内存占用量或强制执行最大年龄图片

  • 使用 HTTP 缓存和 CDN(例如 CloudFront)有助于最大限度地缩短通过网络请求图像时的响应时间

关于android - 在 Unity Android/iOS 中高效存储大量图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55734786/

相关文章:

c# - 如何使用 C# 在 PC 上模拟 PS4 Controller 的操纵杆?

java - 使用 while 循环报告进度和完成情况是否正确?

ios - 向 tableView 添加工具栏

ios - 钱包中的 Apple Pass 不会在推送通知时更新

ios - UIColor:灰度值是一个属性吗?

iphone - 如何处理与游戏相关的分辨率变化 320x480 => 640x960

android - 可变屏幕分辨率 Sprite 不缩放统一

android - SoundPool 停止功能不停止

android - 每行放置 2 列回收器 View

java - Android 中的 Onclick 功能