0

我需要阅读一个处理大型文本文件。我目前一次读取一行并同步处理。我需要提高性能并意识到磁盘访问是一个瓶颈。我想重构一个磁盘读取线程将数据放在等待处理的队列中,多个线程进行处理。我担心的是,一次只读取一行可能无法足够快地将数据提供给处理线程。有没有办法每次读取多行?我需要确保我不会破坏任何单词,因为处理是基于单词的。

4

1 回答 1

2

虽然您的程序一次读取一行,但运行时库正在从文件中读取大块数据,然后从内存缓冲区中解析这些行。因此,当您读取文件的第一行时,真正发生的是运行时库加载一个大缓冲区,扫描它以找到第一行的结尾,然后将该行返回给您。下次你请求一行时,运行时库不必读取,而只需找到下一行的结尾。

该缓冲区有多大取决于运行时库,并且可能取决于您如何初始化文件。

此外,文件系统可能会维护更大的缓冲区。例如,您的运行时库可能有一个 4 KB 的文件缓冲区,而操作系统可能正在缓冲 64 KB 块中的输入文件。

简而言之,您可能不需要做任何特别的事情来优化文本文件的读取。您也许可以指定一个更大的文件缓冲区,在某些情况下我已经看到了这种帮助。除此之外,不值得担心。

除非您有一个特别快的磁盘子系统,否则如果您逐行顺序读取,典型的开发人员机器将维持每秒 50 到 100 兆字节的速度。在大多数文本处理应用程序中,这将成为您的限制因素。

于 2013-11-12T14:33:49.483 回答