我正在开发一个读取巨大文本文件(最大可达 5gb)的应用程序。目前,我正在使用 fscanf 读取文件,因为我发现它是迄今为止最快的。但是,读取整个文件仍然需要相当长的时间。
有没有更快的方法从文件中读取数据?
我正在开发一个读取巨大文本文件(最大可达 5gb)的应用程序。目前,我正在使用 fscanf 读取文件,因为我发现它是迄今为止最快的。但是,读取整个文件仍然需要相当长的时间。
有没有更快的方法从文件中读取数据?
首先,您应该强烈避免将 5GB 文件作为单个步骤读入内存。仅内存影响就应该使您远离这种方法。相反,您应该尝试采用另一种方法,例如:
NSFileWrapper
(远非灵丹妙药,但可以与上述结合使用;NSFileWrapper
自动进行内存映射)您应该从获取性能基线开始:
time cat thebigfile.dat > /dev/null
很难想象读取文件的速度比这快得多,所以这就是你的地板。
您绝对应该在 Instruments 中进行一些性能分析,并确保问题出在读取而不是处理上。特别是,内存分配可能比您预期的要昂贵,尤其是在多线程应用程序中。
研究完上述内容后,您仍然需要真正快速管理磁盘数据,请查看dispatch_io和dispatch_data。这是一个非常棒的高速数据管理工具。但在担心这种优化之前先改进你的基本算法几乎总是更好的。