0

Boost を正規表現に厳密に使用するアプリケーションがあります。私は g++4.9 にアップグレードし、組み込みの正規表現関数を使用するようにコードの一部 (すべてではありません) を切り替えました (単純な変更)。切り替え後、valgrind の --callgrind 機能を使用してアプリケーションのプロファイルを作成してみました。しかし、それは非常に遅いです。これは私のアプリケーションに関連していますが、1 秒あたり約 30 回の繰り返しから、1 秒あたり 1 回未満になりました。アプリケーション自体ではないことを確認するために、valgrind を実行して/実行せずにテストしました。Boost の実装でもテストしましたが、問題はありませんでした。

valgrind 3.10.0 と 3.10.1 でテストしましたが、どちらも同じ動作を示します。

編集: 私が置き換えた関数の簡易版。Boost と C++ の構文が類似しているため、2 つの関数は名前空間 (Boost:: v. std::) を除いて本質的に同一です。

void func() {
    ifstream fin;
    fin.open("file1");

    string check;
    stringstream ss (stringstream::in | stringstream::out);
    ss << "Some complicated regex";
    getline(ss, check);
    regex replacementRecord(check);

    smatch results;

    regex pattern1("thing1");

    while(!fin.eof()) {
        string line;
        getline(fin, line);
        // skip blank or newline
        if (line == "" || line == "\n") {
            continue;
        }

        // Check for these important patterns first
        if (regex_search(line, results, pattern1)) {
            // do stuff
            continue;
        } 

        // No important patters, look for this replacementRecod
        if(regex_search(line, results, replacementRecord)) {
            string prefix(results[1].first, results[1].second);
            // do stuff
        }
        else {
            // do other stuff
        }
    }
    fin.close();
}
4

0 に答える 0