当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2015-02-18

    本文导语:  有很多文本文件,每个记录一行。在读取文件时怎样做才能提高读取文本文件的速度呢? 个人目前只是想到: 1。read时读到大缓冲区,减少io次数。 2。起多个线程,分段读取。能否实现多个线程读时线性提高速度呢...

有很多文本文件,每个记录一行。在读取文件时怎样做才能提高读取文本文件的速度呢?
个人目前只是想到:
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可以在程序运行的过程中减少用户态和核心态切换的次数,从而使系统开销减小。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 来一个高难的问题:怎样能保证文件的物理连续存储?或者说如何能最大限度提高文件I/O的效率?
  • 怎样才能一步步提高自己的java水平?我个人认为是不断的作一些实际的小程序,但是什么阶段作什么样的小程序我不清楚,请指教


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3