请教数据快速读取的问题
现在需要快速的读取很多小文件,每个小文件200-300k,全加起来几个G。怎样设计程序才能使得读取速度比较快?
相比较于windows的重叠io神码的,使用标准的c和c++的io函数是不是没多少提高的空间?
再就是怎样才能禁止操作系统在读取文件时使用缓存?
请指教,先谢了!
[解决办法]
不靠调用WindowsAPI的话,要用fopen一个一个的打开文件来读入,那可是没法快了。每次操作系统都得重新去寻找文件,那都要时间啊。上万个文件的寻找时间加起来,那再少也不少了。
操作系统既然要读取文件又怎么可能不使用缓存呢?没有缓存那还怎么和磁盘文件交互呢?
[解决办法]
是不是可以先查看文件的物理信息,再依据其在磁盘上的物理位置(磁道,区)按特定顺序访问,增加缓存,再加上多线程啥的,呃,好烦。。。
[解决办法]
我的情况:
4000多个文件,平均每个是 200kb 。 存储与 raid 1 的机械硬盘。
机械硬盘的特点,顺序读取快, 100MB /s 左右。 随机读取,性能糟糕得一塌糊涂。
电脑上,还有个 ramdisk 。 所以,直接一个线程,把 机械盘上的 4000多个随机文件copy 到 内存ramdisk。 (由于复制,是 顺序读取,这个过程 几秒钟完成)。
同时,还有n个线程,(n = cpu 核心数),去 ramdisk 上,fread 那些随机文件。。
如果直接去机械盘上读取,耗时十几秒。 先一次性复制到内存,再读取,耗时两三秒。
顺序读取和随机读取,机械盘的性能有着数量级的差异
[解决办法]