我正在尝试使用 Java(更少的内存和尽可能快的访问)有效地加载大型 CSV 格式的文件(通常为 200-600mb)。目前,该程序正在使用字符串数组列表。此操作之前是使用 Lua 程序处理的,该程序使用每个 CSV 行的表和保存每个“行”表的表。
以下是内存差异和加载时间的示例:
- CSV 文件 - 232mb
- Lua - 549mb 内存 - 157 秒加载
- Java - 1,378mb 内存 - 12 秒加载
如果我没记错的话,Lua 表中的重复项作为对实际值的引用存在。我怀疑在 Java 示例中,列表保存了每个重复值的单独副本,这可能与较大的内存使用量有关。
以下是 CSV 文件中数据的一些背景信息:
- 每个字段由一个字符串组成
- 每行中的特定字段可以包括一组字符串中的一个(例如,字段 3 可以是“红色”、“绿色”或“蓝色”)。
- 内容中有许多重复的字符串。
以下是加载数据可能需要的一些示例:
- 搜索所有试图与给定字符串匹配的字符串并返回匹配的字符串
- 在 GUI 表中显示匹配项(可通过字段排序)。
- 更改或替换字符串。
我的问题 - 是否有一个集合需要更少的内存来保存数据,但仍然提供轻松快速地搜索/排序数据的功能?