当前位置: 首页 > 面试题库 >

C ++ ifstream.getline()比Java的BufferedReader.readLine()慢得多?

孙鑫鹏
2023-03-14
问题内容

我正在重写我的一个Android应用程序以利用NDK,并且它每次要做的第一件事之一是打开一个1.5MB的文本文件(大约15万行),并将每一行放入数据中结构体。当我使用Java的BufferedReader.readLine()进行此操作时,从SD卡读取文件大约需要2.5秒。这是我用于此的代码:

try {
    BufferedReader br = new BufferedReader(new FileReader("/sdcard/testfile.txt"));
    String thisLine;
    while ((thisLine = br.readLine()) != null) {
        Log.d(TAG, thisLine);
    }
} catch (IOException e) {
    //Log error
}

将C 与ifstream一起使用需要更长的时间…对于同一文件大约需要3分钟。这是我在C 中使用的代码:

char buffer[256];
ifstream ifs;
ifs.open("/sdcard/testfile.txt", ifstream::in);
if (ifs.is_open()) {
    while (!ifs.eof()) {
        ifs.getline (buffer,100);
        LOGD(buffer);
    }
}

我对C
相当生疏,但是对于增加的读取时间却无法想到任何合理的解释。有一阵子我以为可能是LOGD函数,但是我尝试将其全部删除,而读取时间并没有真正帮助。有人对这个问题可能有什么想法吗?有没有更快的方法在C

中逐行读取文件?谢谢。


问题答案:

一种想法是stdio同步可能会拖慢您的速度。可以关闭。我不知道这是否可以解决所有差异,但是您可以尝试。另外,您使用不eof()正确。最后,我将使用std
:: string版本的getline()

std::ios::sync_with_stdio(false);
ifstream ifs("/sdcard/testfile.txt");
std::string line;
while (getline(ifs, line))
{
    LOGD(line);
}

我尚未测试此代码,但是您可以尝试一下,看看它是否有所不同。



 类似资料:
  • 问题内容: Python比Java / C#慢吗? 性能比较c-java-python-ruby-jython-jruby- groovy 这是一个优化CPython的项目:空载吞咽 问题答案: 不要混淆语言和运行时。 Python(该语言)具有许多运行时实现。 CPython通常是解释型的,并且会比本机代码C#慢。取决于Java JIT编译器,它可能比Java慢。 JYthon在JVM中进行解释

  • 下面的代码将简单的值持有者映射到一个对象,它在Java中的运行速度比使用XCode 7 beta3“最快、积极的优化[-ofast]”的Objective-C快15倍以上。在Java中,我可以获得超过280m/sec的查找,但在objc示例中只有大约19m。(我在这里发布了相应的Java代码,因为这是作为一个Swift比较开始的:Swift Dictionary即使经过优化也很慢:是否不断保留/发

  • 我正在使用mongoose来计算匹配某个查询的文档数量。此查询的索引为: Mongo版本为3.2,收藏文档数量约为175万。 需要2分多钟。但如果我这么做了: 然后大约需要2.5秒。 我做错什么了吗?我能做些什么来加快速度吗? 编辑:解释日志。 计数: 为了找到。

  • 我刚刚实现了基本的opengl渲染到我的pyplay应用程序中,认为硬件加速会使程序运行得更快。相反,它要慢得多。 看起来问题是绘图功能。 这是我的opengl绘图功能 我的分析器为draw函数提供了什么 我的分析器文本的其余部分:(1个月后到期) http://pastebin.com/ApfiCQzw 我的源代码 https://bitbucket.org/claysmithr/warbots

  • 问题内容: 嗨,我想了解为什么下面的代码使用正则表达式进行拆分字符串拆分 比下面的python代码慢 这是 我在osx上使用clang ++。 使用-O3进行编译可以降低到 问题答案: 我将循环数增加到1000000,以获得更好的计时措施。 这是我的Python时间: 这等效于您的代码,但更漂亮: 定时: 这是为了避免构造和分配矢量和字符串对象而进行的优化: 定时: 这几乎是100%的性能提升。

  • 问题内容: 我想比较使用Python和从读取的字符串输入的行数,并且震惊地看到我的C ++代码比等效的Python代码慢一个数量级。由于我的生锈,并且我还不是专家,所以请告诉我我做错了什么还是误解了什么。 (TLDR答案:包括以下声明:或仅使用fgets代替。 TLDR结果:一直滚动到我的问题的底部,然后查看表格。) C ++代码: 等同于Python: 这是我的结果: 我应该注意,我在Mac O