2

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

有没有更快的方法从文件中读取数据?

4

1 回答 1

2

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

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

您应该从获取性能基线开始:

time cat thebigfile.dat > /dev/null

很难想象读取文件的速度比这快得多,所以这就是你的地板。

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

研究完上述内容后,您仍然需要真正快速管理磁盘数据,请查看dispatch_iodispatch_data。这是一个非常棒的高速数据管理工具。但在担心这种优化之前先改进你的基本算法几乎总是更好的。

于 2012-07-30T16:31:39.353 回答