读一个非常大的文件

时间:2012-07-30 16:05:02

标签: cocoa

我正在开发一个读取大文本文件的应用程序(最大可达5GB)。目前,我使用fscanf读取文件,因为我发现它是目前为止最快的。但是,读取整个文件仍需要相当长的时间。

是否有更快的方式从文件中读取数据?

1 个答案:

答案 0 :(得分:2)

首先,您应该强烈避免将5GB文件作为一个步骤读入内存。单独记忆的影响应该让你远离这种方法。相反,您应该尝试采用另一种方法,例如:

  • 在阅读数据时处理数据并丢弃数据
  • 在工作之前将文件转换为Core Data模型
  • 将文件转换为固定长度的记录格式,以便您可以进行随机访问
  • 修改文件格式以减少冗余
  • 索引文件,以便您可以进行随机访问
  • 将数据分区为单独的文件
  • 内存使用NSFileWrapper映射文件(远离灵丹妙药,但可以与上述内容结合使用; NSFileWrapper自动执行内存映射)

首先应该获得性能基准:

time cat thebigfile.dat > /dev/null

很难想象读取文件的速度要快得多,所以这就是你的理由。

你绝对应该在仪器中进行一些性能分析,并确保问题是阅读而不是处理。特别是,内存分配可能比您预期的更昂贵,尤其是在多线程应用程序中。

一旦您对上述内容进行了调查,您仍需要快速管理磁盘数据,请查看dispatch_iodispatch_data。这是一个非常棒的高速数据管理工具。但在担心这种优化之前,最好先改进基本算法。