在我的应用程序中,我试图合并已排序的文件(当然要保持它们的排序),因此我必须遍历两个文件中的每个元素以将最小值写入第三个文件。这在大文件上工作得非常慢,就我看不到任何其他选择(必须完成迭代)而言,我正在尝试优化文件加载。我可以使用一定数量的 RAM,用于缓冲。我的意思是每次我可以读取一次类似 100Mb 的内容并在之后使用该缓冲区,而不是从两个文件中读取 4 个字节,直到缓冲区中没有元素,然后我将再次重新填充缓冲区。但我想 ifstream 已经在这样做了,它会给我更多的性能吗?有什么理由吗?如果 fstream 可以,也许我可以更改该缓冲区的大小?
添加
我当前的代码看起来像那样(伪代码)
// this is done in loop
int i1 = input1.read_integer();
int i2 = input2.read_integer();
if (!input1.eof() && !input2.eof())
{
if (i1 < i2)
{
output.write(i1);
input2.seek_back(sizeof(int));
} else
input1.seek_back(sizeof(int));
output.write(i2);
}
} else {
if (input1.eof())
output.write(i2);
else if (input2.eof())
output.write(i1);
}
我不喜欢这里的是
- seek_back - 我必须回到以前的位置,因为没有办法偷看 4 个字节
- 从文件中读取过多
- 如果其中一个流在 EOF 中,它仍然会继续检查该流,而不是将另一个流的内容直接输出,但这不是一个大问题,因为块大小几乎总是相等的。
你能建议改进吗?
谢谢。