250K 行のファイルを読み込んで、これらの各行に正規表現を適用しようとしています。ただし、コードは Java の readline 関数よりもはるかに低速です。Java ではすべての解析が 10 秒以内に完了しますが、C++ では 2 分以上かかります。相対的なC++ ifstream.getline() が Java の BufferedReader.readLine() よりも大幅に遅いのを見たことがありますか? main の上に次の 2 行を追加しました。
std::ifstream::sync_with_stdio(false);
std::ios::sync_with_stdio(false);
コードの残りの部分 (正規表現が原因である可能性のある遅延を取り除くために単純化しました):
#include "stdafx.h"
#include <ios>
#include <string>
#include <fstream>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
std::string libraryFile = "H:\\library.txt";
std::ios::sync_with_stdio(false);
std::string line;
int i = 1;
std::ifstream file(libraryFile);
while (std::getline (file, line)) {
std::cout << "\rStored " << i++ << " lines.";
}
return 0;
}
この例は非常に単純に見えますが、ほとんどの投稿で提案されている修正でさえうまくいかないようです。VS2012 でリリース設定を使用して .exe を複数回実行しましたが、Java の時間に到達できません。