C ++でテキストファイルを読み取る標準的な方法は、getline関数を呼び出すことです。ファイル内のすべての行を繰り返し処理してその長さを合計するには、次のようにします。
while(getline(is, line)) {
x += line.size();
}
これはどれくらい速いですか?
ディスクにアクセスできない最近のGNUGCCコンパイラを搭載したSkylakeプロセッサでは、約2GB /秒で動作します。これは、優れたフラッシュドライブの最大スループットよりも低速です。これらの結果は、さらに高速なディスクを購入してもシングルスレッドのスループットが向上しないという意味で、C ++でテキストファイルを読み取るとCPUが制限される可能性があることを示しています。
nanoseconds per byte: 0.46 ns
speed: 2.0 GB/s
getline関数呼び出しによって生成された文字列を処理するコードを作成する場合、最悪の場合、合計時間はgetline関数に必要な時間とコードに必要な時間の合計になります。つまり、2 GB / sに近い速度を達成する可能性はほとんどありません。
それに比べて、simdjsonのようなソフトウェアライブラリは、2 GB / sを超える速度で、Unicode検証から数値解析まですべてを実行してJSON入力を解析および検証できます。
私はそうしようとはしていませんが、2 GB / sよりもはるかに速い速度で、線を見つけて反復することができます。
英語原稿: https://lemire.me/blog/2019/06/18/how-fast-is-getline-in-c/