首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问数据快速读取的有关问题

2012-05-13 
请教数据快速读取的问题现在需要快速的读取很多小文件,每个小文件200-300k,全加起来几个G。怎样设计程序才

请教数据快速读取的问题

现在需要快速的读取很多小文件,每个小文件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 那些随机文件。。

如果直接去机械盘上读取,耗时十几秒。 先一次性复制到内存,再读取,耗时两三秒。

顺序读取和随机读取,机械盘的性能有着数量级的差异

[解决办法]

探讨

引用:

你也没说读进来干什么, 怎么设计程序呢.

把需求说明白比较好, 不同的情况解决方法定然不同, 没有通用方案.


你好,在做一个volume render,渲染比较大的体数据。整个体数据生成不同分辨率的模型后切割成很多小块数据然后压缩。渲染的时候由于显存有限只能加载部分数据。两个线程,一个线程渲染,另一个不断从硬盘读取数据(pre-fetching)……

热点排行