为了账号安全,请及时绑定邮箱和手机立即绑定

用c ++快速读取文本文件

用c ++快速读取文本文件

C++
白衣非少年 2019-08-15 17:00:06
用c ++快速读取文本文件我目前正在用c ++编写一个程序,其中包括阅读大量的大文本文件。每行有~400.000行,极端情况下每行有4000或更多字符。仅供测试,我使用ifstream和cplusplus.com提供的实现读取其中一个文件。花了大约60秒,这太长了。现在我想知道,有没有一种直接的方法来提高阅读速度?编辑:我使用的代码或多或少是这样的:string tmpString;ifstream txtFile(path);if(txtFile.is_open()){     while(txtFile.good())     {         m_numLines++;         getline(txtFile, tmpString);     }     txtFile.close();}编辑2:我读的文件只有82 MB大。我主要说它可以达到4000,因为我认为可能有必要知道为了做缓冲。编辑3:谢谢大家的答案,但考虑到我的问题似乎没有太大的改进空间。我必须使用readline,因为我想计算行数。将ifstream实例化为二进制文件也不会使读取速度更快。我将尝试尽可能地并行化它,至少应该起作用。编辑4:显然我可以做一些事情。非常感谢你花了这么多时间,我非常感激!=)
查看完整描述

3 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

Neil Kirk,遗憾的是我无法回复你的评论(信誉不足),但我对ifstream进行了性能测试,并且逐行读取文本文件的性能完全相同。

std::stringstream stream;std::string line;while(std::getline(stream, line)) {}

在106MB文件上需要1426ms。

std::ifstream stream;std::string line;while(ifstream.good()) {
    getline(stream, line);}

这在同一个文件上需要1433ms。

以下代码更快:

const int MAX_LENGTH = 524288;char* line = new char[MAX_LENGTH];while (iStream.getline(line, MAX_LENGTH) && strlen(line) > 0) {}

这在同一个文件上需要884ms。这只是有点棘手,因为您必须设置缓冲区的最大大小(即输入文件中每行的最大长度)。


查看完整回答
反对 回复 2019-08-15
  • 3 回答
  • 0 关注
  • 1297 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信