gpt4 book ai didi

Android Assets 太慢

转载 作者:行者123 更新时间:2023-11-30 05:06:42 27 4
gpt4 key购买 nike

我有带 Assets 的 Android 应用程序。它们包含 20,000 多个文件,其中大部分是简单的文本或 png 文件,分为不同的文件夹和子文件夹。1 个单个文件的最大大小为 500kb,其中 90% 都在 2kb 左右。

示例结构

Data
... subfolders with 20k+ files
StartData
.... FolderA
........ 5 files *.txt
.... FolderB
........ 5 files *.txt
.... a.xml
.... b.xml

问题是应用程序的加载时间。在应用程序加载期间,我需要从 StartData 目录中打开大约 20 个文件并从中读取设置。它们位于 2 个 xml 文件中,基于 xml 中的信息,我从两个子文件夹 FolderA/FoldeB 打开其他数据。

但是,速度非常差,应用启动时间至少比没有 Assets 时长 3-4 倍。

在以前的版本中,我在 raw 目录中有 zip,它在第一次运行到文档目录时被解压缩。第一次运行很慢,但其他运行速度很快。这个解决方案的问题在于安装速度,因为在旧手机上解压缩最多需要 5 分钟,并且它不会在此过程中死机。如果是这样,应用程序已损坏并且数据仅部分解压缩,所以我放弃了这个解决方案。

使用我以前的方法,如果解压缩正确完成,应用程序冷启动大约需要 5 秒。现在,有了 Assets ,最多需要 20 秒。有什么解决办法吗?

我在 gradle 中禁用了 Assets 压缩(我只有 *.txt、*.png 和 *.xml 文件)

aaptOptions{
ignoreAssetsPattern ''
noCompress 'txt', 'png', 'xml'
cruncherEnabled = false
}

但改进很小。

此外,我正在使用 NDK (JNI) 和 AssetManager 在 C++ 中加载我的 Assets 。在 C++ 中打开 Assets 的解决方案取自:http://www.50ply.com/blog/2013/01/19/loading-compressed-android-assets-with-file-pointer/

最佳答案

发现 Assets 文件夹中数千个文件的偏移量很慢,我并不感到惊讶,而且文件系统更适合此类任务。我会说也许应该重写数据结构。例如,您可以将此信息放入数据库中。

我对 funopen() 技巧持怀疑态度。我的意思是,它工作可靠,但我担心开销。处理非压缩 Assets 的更有效方法是通过 AAsset_getBuffer()AAsset_openFileDescriptor() .检查 example使用文件描述符。请注意,最后,所有数千个"file"都会有一个文件描述符。

顺便说一下,我不认为使用这些直接访问方法的 Java 性能比 C 差。您可以使用 zlib 从 APK 文件(ZIP 格式)中读取您的 Assets 本身),但我怀疑你会比 AssetManager 做得更快。

关于Android Assets 太慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47813427/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com