【发布时间】:2018-07-26 22:48:48
【问题描述】:
我正在尝试将一些表格数据读入内存以在我的应用程序运行期间使用,但反复实例化这些值会触发垃圾收集并导致数据需要很长时间才能加载。我已经读到实例化大量对象时会发生这种情况,但我在想出一种存储数据的方法时遇到了麻烦。
数据如下所示,有 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 内存分析器,我可以看到拆分导致大量 Strings 的实例化,这就是导致 GC 事件的原因。
我曾考虑将数据存储在 SQLite 或 Firebase 中,或者设置一个快速服务器来处理大数据,但所有这些对于将 8 MB 数据拉入内存来说似乎都是多余的。
虽然将一些数据提取到内存中似乎是一项非常常见的任务,但我很难找到许多其他有同样问题的人。我完全不知道我将如何处理这件事吗?有没有其他方法可以将这些数据提取到我还没有找到的内存中?
任何帮助将不胜感激。谢谢!
【问题讨论】:
标签: android performance csv garbage-collection instantiation