我希望优化C++模拟应用程序的读/写大数据.被称为"地图"的数据基本上由整数,双精度,浮点数和单个枚举组成.大部分地图数据的大小是固定的,但其中一小部分的大小可以变化(从几个到几KB).几个这样的映射(通常是数百万)在应用程序开始时计算一次,然后存储在单个二进制文件中,以便在每个模拟时间步骤进行解析.
由于有几百万个映射,因此fseek和fread是主要的瓶颈,解析这个二进制文件的速度非常慢.我正在寻找另一种方法来做同样的事情.
有什么指针吗?
既然你没有提到你正在运行它的操作系统,你是否看过映射文件的内存,然后使用标准内存例程来"走"文件?
这样你就不会使用fseek/fread而是使用指针算法.这是一个将一个文件从源文件复制到目标文件的mmap示例.这可以改善性能.
您可以查看的其他内容是将文件拆分为较小的文件,并使用与时间单位对应的哈希值关闭然后打开下一个文件以继续模拟,这样处理可以更积极地缓存的较小文件由主机操作系统!