Android 将数据读入内存

Android Read Data Into Memory

我试图将一些表格数据读入内存以供在我的应用程序的整个 运行 中使用,但是重复实例化这些值会触发垃圾回收并导致数据加载时间很长。我读到在实例化大量对象时会发生这种情况,但我无法想出一种存储数据的方法。

数据如下所示,有 12,500 行和 101 列:

+-------+-------------+-------------+-----+---------------+
| id    | parameter 1 | parameter 2 | ... | parameter 100 |
+-------+-------------+-------------+-----+---------------+
| 1     | 237.1238220 | 483.2398201 | ... | 403.302910100 |
| 2     | (Float Val) | (Float Val) | ... |  (Float Val)  |
.
.
.
| 12500 | (Float Val) | (Float Val) | ... |  (Float Val)  |
+-------+-------------+-------------+-----+---------------+

目前,我正在使用 BufferedReader 逐行读取数据。这不需要太多时间。然后,我使用单个字符定界符 (",") 在逗号上拆分每一行,并将 String[] 存储在一个对象中。

之前,我试图将 map 中的 String[] 转换为 Float[],但这需要更长的时间。使用 Android Studio 内存分析器,我能够看到拆分导致大量 String 的实例化,这就是导致 GC 事件的原因。

我考虑过将数据存储在 SQLite 或 Firebase 中,或者设置一个快速服务器来处理大数据,但是所有这些对于将 8 MB 的数据拉入内存来说似乎太过分了。

虽然将一些数据拉入内存似乎是一项很常见的任务,但我很难找到许多其他有同样问题的人。我完全不了解我的处理方式吗?有没有其他方法可以将这些数据拉入内存,但我还没有找到?

如有任何帮助,我们将不胜感激。谢谢!

12500 行 x 101 列 = 1262500 个字符串。这应该可以解释一切。您正在创建超过 100 万个对象字符串。除了字符串值之外,内存方面,你必须考虑到每个值都会被保存为一个String对象,推入内存超过100万个对象当然会产生很大的影响。 对于您的场景,要走的路是 SQLite 数据库。与你认为的相反,它并不过分。建立一个 SQLite 数据库很简单,而且对于这样的数据量非常有效。