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

An efficient way to read/write a large scene file

本文关键字:文件 有效 方法 大型 读取      更新时间:2023-10-16

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

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

提前谢谢。

无论你要编码什么,硬件很可能都是瓶颈(所以没有软件技巧可以缓解这一点)。

(我猜你在Linux上)

您可以使用需求读取并使用一些更高级别的库,如GDBM或sqlite。

如果你做低级 IO(所以没有这样的库),考虑使用 Linux 特定的 readahead(2),更可能是 posix_fadvise(2)(如果你mmap,则使用 madvise(2) )

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