读取/写入大型场景文件的有效方法
An efficient way to read/write a large scene file
我有一个大型场景(在多个网格中包含数百万甚至数十亿个多边形)文件要加载或写入内部游戏引擎,我想知道是否有人可以给我一个提示加载该场景文件的最快方法。
我在网上做了一些研究,文件加载有三种主要方式:块读/写、文件映射和多线程读/写。我还了解到,如果程序读取/写入单个文件,则使用多个线程似乎不合适。因此,看起来将整个场景中的所有数据作为一个巨大的内存块进行管理,以使用 fread()/fwrite()(c++ 中的方法)进行读取/写入,在我的场景加载/写入机制中是一个不错的选择。我想知道每种文件加载/写入方法的优缺点是什么,以及 fread()/fwrite() 在处理大型场景文件的 IO 进程方面是否足够好。
提前谢谢。
无论你要编码什么,硬件很可能都是瓶颈(所以没有软件技巧可以缓解这一点)。
(我猜你在Linux上)
您可以使用需求读取并使用一些更高级别的库,如GDBM或sqlite。
如果你做低级 IO(所以没有这样的库),考虑使用 Linux 特定的 readahead(2),更可能是 posix_fadvise(2)(如果你mmap
,则使用 madvise(2) )
当然,良好的缓冲是必不可少的(如果使用 <stdio.h>
,它可能比C++流更有效,请考虑 setvbuf(3)...)
相关文章:
- WinVerifyTrust 仅在使用文件而不是内存 blob 时才有效
- 如何在C++中写入 1000 个文件时有效地缓冲
- 为什么TinyXML2的XMLDocument::FirstChild()函数在尝试解析这个有效的XML文件时返回NULL?
- 用于随机数据访问的最有效文件类型
- 如何知道文本文件中的输入是否是 C++ 中的有效数字
- 如何检查字符串格式在读取C++文本文件时是否有效?
- 为什么使用_access时只读测试对读写文件有效
- free():在有效指针异常中-使用流读取巨大文件时
- 如何在C#或C++中获取文件或文件夹的有效权限?有什么 API 吗?
- c++ - 将大文件记录处理到 cpp 容器的最有效方法
- 在 h 和 cpp 文件中单独声明和实现模板有时有效,有时会出现链接器错误
- 有效地从文本文件中读取带有字符串索引的大型二维数组(矩阵)
- 如何有效地读取和存储 1GB 文本文件中的数据
- 如何检查给定文件是否是C++中的有效视频文件?
- 程序'main.exe'运行失败:指定的可执行文件不是此操作系统平台的有效应用程序
- C++,我正在尝试创建一个有效的.bmp输出文件
- 通过套接字发送二进制文件.文本文件有效,其他文件无效
- C++为什么在一种情况下保存到文件有效,而另一种情况则无效
- C++生成文件%.C有效,%.cpp无效
- 库文件有效,但 DLL 文件不起作用