1

我有一些中等大小的 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 阅读器包,但它们非常慢。

这是调试会话的屏幕截图:

在此处输入图像描述

感谢您的任何建议。

4

0 回答 0