小编led*_*kol的帖子

std :: ifstream缓冲区缓存

在我的应用程序中,我正在尝试合并已排序的文件(当然保持它们排序),因此我必须遍历两个文件中的每个元素以将最小值写入第三个.这对大文件来说非常慢,只要我没有看到任何其他选择(迭代必须完成)我正在尝试优化文件加载.我可以使用一些RAM,我可以用它来缓冲.我的意思是不是每次读取两个文件中的4个字节,而是每次读取100Mb之类的东西,然后使用该缓冲区,直到缓冲区中没有元素,然后我将再次重新填充缓冲区.但我想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);
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢的是

  • seek_back - 我必须回到以前的位置,因为没有办法偷看4个字节
  • 从文件中读取太多
  • 如果其中一个流在EOF中,它仍然继续检查该流而不是将另一个流的内容直接输出到输出,但这不是一个大问题,因为块大小几乎总是相等的.

你能建议改进吗?

谢谢.

c++ sorting performance file buffering

8
推荐指数
2
解决办法
6767
查看次数

标签 统计

buffering ×1

c++ ×1

file ×1

performance ×1

sorting ×1