我想读取几个文件中的行而不是每行一行。 文件不适合内存,所以我必须从磁盘读取。 C中从具有最佳性能的几个文件中读取特定行的最佳方法是什么?
示例:
答案 0 :(得分:2)
在Linux上,您可以使用mmap(2)系统调用来读取和存储以兆字节块为单位映射文件,可能使用madvise(2),也许(在另一个线程中)readhahead(2)系统调用。< / p>
但瓶颈可能是你的硬件。考虑使用SSD或非常快的磁盘。
如果你对行边界感兴趣,你应该明确地管理它们(并记住它们),或者记住一些换行符的一些偏移。
答案 1 :(得分:2)
如果您使用的是Linux或Windows,则可以创建该文件的文件映射。这不会放入内存中,并且可以快速访问文件的缓冲区。
在linux中你可以检查那个人是否有“mmap”。
在Windows中我不记得了,但你可以谷歌它:Windows上的文件映射。
关于逐行阅读,您只需使用fscanf或实现自己的功能,请记住:在Linux中读取“\ n”,在Windows中读取“\ r \ n”。
祝你好运!答案 2 :(得分:1)
您的问题不在于读取文件。 您的问题是要知道要读取的文件的哪一部分。
为此,您必须事先准备一个索引表,其中包含每行开头的位置。
当然,您可以以懒惰的方式构建它,然后需要第N行。
答案 3 :(得分:0)
不知道您使用的是哪个文件系统,但几乎可以肯定它无法自动跟踪断路器在文件保留的内存中的位置。
这就是说,为了有办法快速访问特定行的文件,你需要建立一个行的索引,如果没有任何已知的你正在处理的文件的适当性,您需要至少完整扫描一次文件以构建此类索引。
显然,如果文件大于系统RAM,则需要在执行构建索引所需的扫描时实施明智的内存管理。
创建索引后,您只需访问要读取的内存的唯一部分。