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

大文件读取如何提高效率,内存池或者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些不就行了?