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

大文件读取怎么提高效率,内存池或者buffer要如何写

2013-01-09 
大文件读取如何提高效率,内存池或者buffer要怎么写本帖最后由 jyj545 于 2012-11-20 11:08:56 编辑怎样写

大文件读取如何提高效率,内存池或者buffer要怎么写
本帖最后由 jyj545 于 2012-11-20 11:08:56 编辑 怎样写出一个相对而言更优化的解决方案。
[解决办法]
文件映射。。。
[解决办法]
一次40G都要读?那么用固态硬盘吧。
[解决办法]
大块读取优化指的是,一次读取一次IO操作能读取的量。假设一次IO可以读8K字节,你可以一次IO读8K或者8K次IO读1个字节。不过操作系统一般有优化,内部成块读的。read的数据只要大过一次IO后就都差不多了。小于的话,花费是在read上。

buffer缓存这种是减少频繁读写用的。好比记事本打开文本,读文本到内存(buffer),编辑时都是内存(buffer)中完成的,等点了save,才实际把数据写进文件。

文件映射,映射相应的数据段到内存里,之后就如操作内存一样。对于很大的文件,但你只对一小段内容感兴趣,可以用这个。写代码方便。

一次40G都读,看看你硬盘IO读写速度,然后算下理论上最快是多少,实际用了多少时间。差不多的话,硬件瓶颈,从代码里就没法再优化了(当然你可以多线程,一边IO,一边处理数据,而不是等全读完后再处理。CPU比IO快多了)。只能增加硬件性能,固态盘贵的话,可以买高速机械盘,再组 raid 0。ssd 组 raid 0就更快了。
[解决办法]
还有插显卡槽上的硬盘,速度更快,价格更贵。
[解决办法]
如果你现在读取本身就是密集的,到了硬件限制,那么多线程读反而会变慢。我说的多线程,是一个负责读文件数据到内存,一个负责处理数据。比如原来你读花了10m,处理花了20m,串行,10+20=30。并行的话,那么就只要20m出头的时间。

至于内存方面,不太理解你想要什么。占用太多内存,少malloc些不就行了?

热点排行