我需要读取一个进程大文本文件。目前,我一次读一行,并同步处理。我需要提高性能,并意识到磁盘访问是一个瓶颈。我希望重构一个磁盘读取线程,将数据放在等待处理的队列上,多个线程执行处理。我担心的是,通过一次只读取一行,我可能无法足够快地将数据提供给处理线程。是否有办法每次读取多行?我需要确保我没有打破任何文字,因为处理是基于文字。
发布于 2013-11-12 14:33:49
当您的程序一次读取一行时,运行时库从文件中读取大量数据块,然后从内存缓冲区解析行。因此,当您读取文件的第一行时,真正发生的情况是运行时库加载一个大型缓冲区,扫描它以找到第一行的末尾,并将该行返回给您。下一次请求行时,运行库不必读取,而只需找到下一行的末尾。
缓冲区的大小取决于运行时库,也可能取决于初始化文件的方式。
此外,文件系统可能维护一个更大的缓冲区。例如,您的运行时库可能有一个4 in的文件缓冲区,而操作系统可能在64 in块中缓冲输入文件。
简而言之,您可能不需要做任何特殊的事情来优化文本文件的读取。您也许可以指定一个更大的文件缓冲区,在某些情况下,我已经看到了这种帮助。除此之外,这不值得担心。
除非您有一个特别快的磁盘子系统,否则典型的开发人员机器将保持每秒50到100兆字节,如果您是逐行读取的话。在大多数文本处理应用程序中,这将是限制您的因素。
https://stackoverflow.com/questions/19926056
复制相似问题