C++ 从一个大文件中写入多个文件的最佳方法?

C++ 从一个大文件中写入多个文件的最佳方法?,c++,io,C++,Io,我有一个非常大的文件(13个gig),其中包含随机二维坐标 我必须把这些二维坐标组织成更小的块。(四叉树)其中的每一个都必须位于唯一的文件中。这可能从任何地方到2到500个街区 这是一个32位应用程序,我无法完全加载2d点 1) 预生成每个文件流并将缓冲区设置为16k。每个文件流都存储在一个数组中。 2) 迭代13 gig文件中的每个点。 3) 确定哪个块点也属于哪个块。 4) 将点写入对应于块的文件流。 5) 迭代所有点后,写入标题并关闭所有流 这太慢了。。。。有更好的方法吗?目前我唯一能想到

我有一个非常大的文件(13个gig),其中包含随机二维坐标

我必须把这些二维坐标组织成更小的块。(四叉树)其中的每一个都必须位于唯一的文件中。这可能从任何地方到2到500个街区

这是一个32位应用程序,我无法完全加载2d点

1) 预生成每个文件流并将缓冲区设置为16k。每个文件流都存储在一个数组中。 2) 迭代13 gig文件中的每个点。 3) 确定哪个块点也属于哪个块。 4) 将点写入对应于块的文件流。 5) 迭代所有点后,写入标题并关闭所有流


这太慢了。。。。有更好的方法吗?目前我唯一能想到的是自己处理缓冲区,以利用更多的内存。

13吉比特的硬盘速度应该不会太快,更不用说随机写入其他文件了。当你在许多不同的文件之间切换时,磁盘将花费大量时间查找。您希望最大限度地提高读/写与寻道的比率(或者在不重要的地方使用SSD)。不要依赖于文件缓冲区,而是自己进行缓冲,这样空输出就不会影响总缓冲容量,并一次向单个文件写入尽可能多的内容。1)使用
块如何?通过分块,您还可以将多个文件分割到多台计算机上。2) 尽可能多地填充内存,并尽可能大地写下所有内容。只有两个想法…试着复制文件,看看需要多长时间。这将使您了解您的程序的效率。如果它比副本慢很多,那么您可能可以改进它。如果是相同的,你是I/O绑定的,没有什么可以做。有一个程序做一些非常类似于我的程序,它在5分钟内完成这个过程,而我上面解释的方法需要6个小时。