我正在寻求优化 C++ 模拟应用程序的读取/写入大量数据。称为“映射”的数据本质上由整数、双精度数、浮点数和单个枚举组成。该地图数据的大部分大小是固定的,但一小部分可能会变化
(从几KB到几KB)大小。几个这样的映射(通常是数百万个)在应用程序启动时计算一次,然后存储在单个二进制文件中,以便在每个模拟时间步进行解析。
由于有几百万个映射,因此解析该二进制文件非常慢,fseek 和 fread 是主要瓶颈。我正在寻找一种替代方法来完成同样的事情。
有什么指点吗?
由于您没有提及正在运行该文件的操作系统,因此您是否查看过内存映射文件,然后使用标准内存例程来“遍历”文件?
这样您就不会使用 fseek/fread 而是使用指针算术。这是一个 mmap 示例 http://www.cs.purdue.edu/homes/fahmy/cs503/mmap.txt将一个文件从源文件复制到目标文件。这可能会提高性能。
您可以研究的其他事情是将文件分割成较小的文件,并使用与时间单位相对应的哈希值关闭然后打开下一个文件以继续模拟,这样处理可以更积极地缓存的较小文件由主机操作系统决定!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)