我有一些中等大小的 CSV 文件(大约 140mb),我正试图将它们变成一个结构数组。
我不想在内存中加载孔文件,所以我使用的是蒸汽阅读器。
对于我读取数据的每一行,将行转换为我的结构并将结构附加到数组中。因为总共有超过 5_000_000 行,所以我曾经reserveCapacity
获得更好的内存管理。
var dataArray : [inputData] = []
dataArray.reserveCapacity(5_201_014)
不幸的是,这根本没有帮助。没有强制差异。调试会话中的内存图上升到 1.54 GB,然后保持在那里。我想知道我做错了什么,因为我无法想象需要 1.54Gb 的 RAM 来存储原始大小为 140mb 的文件中的结构数组。
我使用以下代码创建数组:
var dataArray : [inputData] = []
dataArray.reserveCapacity(5_201_014)
let stream = StreamReader(path: "pathToDocument")
defer { stream!.close() }
while let line = stream!.nextLine() {
if line.isHeader() {} else {
let array = line.components(separatedBy: ",")
dataArray.append(inputData(a: Float32(array[0])!, b: Float32(array[1])!, c: Float32(array[2])!))
}
}
我知道 GitHub 上有几个 CSV 阅读器包,但它们非常慢。
这是调试会话的屏幕截图:
感谢您的任何建议。