私は、かなり大きな (4-5 MB) 行列型 (N*M の行と列として格納された数値) の ASCII ファイルを処理する小さなプログラムに取り組んでいます。
1 2 3
4 5 6
7 8 9
etc.
古いスタイルの C ファイルの入力方法が次のようになっていることに気付きました。
csFile = fopen("file.dat","r");
while(fscanf(csFile, "%lf", &Point)!=EOF) {
}
fclose(csFile);
最も基本的な C++ 実装よりもはるかに高速です (約 230k の数値を格納する 3MB ファイルの約 1500 ミリ秒と比較して 230 ミリ秒):
ifstream myfile ("file.dat");
while(myfile >> Point) {
}
myfile.close();
簡単にするために、ループ内のデータ操作関数は省略しましたが、これらの「生の」例でさえ、C 型 I/O のほぼ 7 倍の拡張を示しています。なぜこれほど大きなパフォーマンスの違いがあるのでしょうか? C++ ストリーム/関数を使用して、これらの種類のファイルをより高速に読み取る方法はありますか?