【发布时间】:2014-09-27 00:02:23
【问题描述】:
我有代码每四行读取一次并用它做一些事情
ifstream in(inputFile, ios::in);
string zeile;
for (int z = 0; z < numberOfSequences; z++) {
getline(in,zeile); // skip 3 lines
getline(in,zeile); // skip 3 lines
getline(in,zeile); // skip 3 lines
getline(in,zeile);
// do something with zeile
}
我的问题是,ASCII 文件有超过 250 000 000 行。所以我对跳过 3 行的最有效方法感兴趣。 getline 是否将某种类型的 in 解析为字符串,或者这是最有效的方法?我不想浪费时间跳过。
【问题讨论】:
-
我认为使用 4096 字节块的乘法读取二进制文件并寻找换行符是最有效的;不确定,需要测试一下。
-
您可能会发现 C IO 函数在解析如此大量的数据时速度更快。悲伤,但真实。
-
我希望最有效的方式涉及异步 I/O。看看Boost.Asio library。
-
除了使您的代码复杂化之外,我看不出使这种异步方式能够完成什么。异步 I/O 并不是一种能神奇地让一切变得更快的钝器。