读取/写入大型场景文件的有效方法

时间:2016-02-29 17:37:03

标签: c++ multithreading io

我有一个大型场景(包含多个网格中数百万甚至数十亿的多边形)文件要加载或写入内部游戏引擎,我想知道是否有人可以给我一个暗示什么是最快的方法加载该场景文件。

我在网上做了一些研究,文件加载有三种主要方式:读取/写入块,文件映射和多线程读/写。我还了解到,如果程序读/写单个文件,使用多个线程似乎是不合适的。因此,看起来像管理整个场景中的所有数据一样,使用fread()/ fwrite()(c ++中的方法)读取/写入大量内存是我场景加载/写入机制中的一个很好的选择。我想知道每个文件加载/写入方法的优缺点是什么,如果fread()/ fwrite()在处理大型场景文件的IO进程时足够好。

提前致谢。

1 个答案:

答案 0 :(得分:2)

无论你的代码是什么,很可能,硬件都会成为瓶颈(所以没有软件技巧可以减轻它)。

(我猜你是在Linux上)

您可以使用需求阅读并使用某些更高级别的库,例如GDBMsqlite

如果您执行低级别IO(所以没有此类库),请考虑使用特定于Linux的readahead(2),更可能使用posix_fadvise(2)(或madvise(2)mmap

当然,良好的缓冲是必不可少的(如果使用<stdio.h>,这可能比C ++流更有效,请考虑setvbuf(3) ...)