我编写了一个转换器,它接受 openstreetmap xml 文件并将它们转换为二进制运行时渲染格式,该格式通常约为原始大小的 10%。输入文件大小通常为 3gb 或更大。输入文件不会一次全部加载到内存中,而是在收集点和多边形时进行流式传输,然后在它们上运行 bsp 并输出文件。最近在较大的文件上,它会耗尽内存并死掉(有问题的文件有 1400 万个点和 100 万个多边形)。通常,当这种情况发生时,我的程序使用大约 1gb 到 1.2gb 的内存。我尝试将虚拟内存从 2 增加到 8GB(在 XP 上),但这种更改没有效果。此外,由于此代码是开源的,我希望它能够在任何可用内存(尽管速度较慢)的情况下运行,它可以在 Windows、Linux 和 Mac 上运行。
我可以使用哪些技术来避免内存不足?在较小的子集中处理数据,然后合并最终结果?使用我自己的虚拟内存类型的处理程序?还有其他想法吗?