当前位置: 技术问答>linux和unix
怎样提高读取文件的速度?
来源: 互联网 发布时间:2015-02-18
本文导语: 有很多文本文件,每个记录一行。在读取文件时怎样做才能提高读取文本文件的速度呢? 个人目前只是想到: 1。read时读到大缓冲区,减少io次数。 2。起多个线程,分段读取。能否实现多个线程读时线性提高速度呢...
有很多文本文件,每个记录一行。在读取文件时怎样做才能提高读取文本文件的速度呢?
个人目前只是想到:
1。read时读到大缓冲区,减少io次数。
2。起多个线程,分段读取。能否实现多个线程读时线性提高速度呢?我试了一下,不是很理想。我的做法是,多个线程,先算每个线程读取多少行,读取的其实位置。然后在线程里打开文件读取。但是没有线性提高速度,反而线程多时速度会慢下来。
希望高手们指点,提高好的方法来提高读取文件的速度。
个人目前只是想到:
1。read时读到大缓冲区,减少io次数。
2。起多个线程,分段读取。能否实现多个线程读时线性提高速度呢?我试了一下,不是很理想。我的做法是,多个线程,先算每个线程读取多少行,读取的其实位置。然后在线程里打开文件读取。但是没有线性提高速度,反而线程多时速度会慢下来。
希望高手们指点,提高好的方法来提高读取文件的速度。
|
你可以考虑建立文件索引的办法来加快检索的速度,例如:
主文件:
......................................................
平时搜索的条件入口对应的位置:
↑ ↑ ↑ ↑
条件1 条件2 ....
索引文件
条件1:偏移量
条件1:偏移量
.....
每次根据条件,取出文件偏移量,直接定位,应该能快点
当然,你也可以建立多重索引来,符合各种速度要求
主文件:
......................................................
平时搜索的条件入口对应的位置:
↑ ↑ ↑ ↑
条件1 条件2 ....
索引文件
条件1:偏移量
条件1:偏移量
.....
每次根据条件,取出文件偏移量,直接定位,应该能快点
当然,你也可以建立多重索引来,符合各种速度要求
|
把整个文件读入内存,在内存中进行操作。
如果整个文件过大,分成合适的几部分。
如果整个文件过大,分成合适的几部分。
|
用
fopen
fread
fwrite
fclose
可以提高系统磁盘读写效率
fopen
fread
fwrite
fclose
可以提高系统磁盘读写效率
|
mmap --文件映射
#man mmap
#man mmap
|
我的看法:
1、读取时Buffer的大小最好为512B的整数倍,因为磁盘一个块的大小就是512B,这样传输的效率最高。
2、Buffer的大小可以适当增大,最好使用stdio.h中定义的BUFSIZ,这是根据系统的不同情况所决定的。适当增大Buffer可以在程序运行的过程中减少用户态和核心态切换的次数,从而使系统开销减小。
1、读取时Buffer的大小最好为512B的整数倍,因为磁盘一个块的大小就是512B,这样传输的效率最高。
2、Buffer的大小可以适当增大,最好使用stdio.h中定义的BUFSIZ,这是根据系统的不同情况所决定的。适当增大Buffer可以在程序运行的过程中减少用户态和核心态切换的次数,从而使系统开销减小。