在对该文件执行某些操作之前,我需要读取文件中的行数。当我尝试读取文件并在每次迭代时增加 line_count
变量直到达到 EOF
。就我而言,它并没有那么快。我同时使用了 ifstream
和 fgets
。他们俩都很慢。是否有一种 hacky 方法可以做到这一点,例如 BSD、Linux 内核或 berkeley db(可能是通过使用按位运算)也使用这种方法。
该文件中的行数以百万计,并且不断变大,每行大约 40 或 50 个字符。我正在使用 Linux。
笔记:
我敢肯定会有人会说使用数据库白痴。但在我的情况下,我不能使用分贝。
原文由 systemsfault 发布,翻译遵循 CC BY-SA 4.0 许可协议
找到行数的唯一方法是读取整个文件并计算行尾字符的数量。最快的方法可能是通过一次读取操作将整个文件读入一个大缓冲区,然后通过缓冲区计算 ‘\n’ 字符。
由于您当前的文件大小约为 60Mb,因此这不是一个有吸引力的选择。您可以通过不读取整个文件来获得一些速度,而是以块的形式读取它,例如大小为 1Mb。您还说数据库是不可能的,但它确实看起来是最好的长期解决方案。
编辑: 我刚刚对此进行了一个小型基准测试,使用缓冲方法(缓冲区大小 1024K)似乎比使用
getline()
一次读取一行的速度快两倍多。这是代码 - 我的测试是使用 g++ 使用-O2
优化级别完成的: