怎样提高读取文件的速度?

来源:互联网 发布:机器人编程实训报告 编辑:程序博客网 时间:2024/05/04 10:00

有很多文本文件,每个记录一行。在读取文件时怎样做才能提高读取文本文件的速度呢?
个人目前只是想到:
1。read时读到大缓冲区,减少io次数。
2。起多个线程,分段读取。能否实现多个线程读时线性提高速度呢?我试了一下,不是很理想。我的做法是,多个线程,先算每个线程读取多少行,读取的其实位置。然后在线程里打开文件读取。但是没有线性提高速度,反而线程多时速度会慢下来。

希望高手们指点,提高好的方法来提高读取文件的速度。
---------------------------------------------------------------

你可以考虑建立文件索引的办法来加快检索的速度,例如:
主文件:
......................................................
平时搜索的条件入口对应的位置:
      ↑       ↑             ↑                  ↑    
    条件1     条件2          ....
索引文件
条件1:偏移量
条件1:偏移量
.....
每次根据条件,取出文件偏移量,直接定位,应该能快点
当然,你也可以建立多重索引来,符合各种速度要求

---------------------------------------------------------------

把整个文件读入内存,在内存中进行操作。
如果整个文件过大,分成合适的几部分。
---------------------------------------------------------------


fopen
fread
fwrite
fclose
可以提高系统磁盘读写效率
---------------------------------------------------------------

mmap --文件映射
#man mmap

---------------------------------------------------------------

我的看法:

1、读取时Buffer的大小最好为512B的整数倍,因为磁盘一个块的大小就是512B,这样传输的效率最高。
2、Buffer的大小可以适当增大,最好使用stdio.h中定义的BUFSIZ,这是根据系统的不同情况所决定的。适当增大Buffer可以在程序运行的过程中减少用户态和核心态切换的次数,从而使系统开销减小。