ファイルの読み取りが遅く、antlr文法で解析するプログラムがあります。これのパフォーマンスを向上させるために、解析をマルチスレッド化したいと思いますか?
ファイルの読み取り:
    LogParser pa = new LogParser();
    LogData logrow;
    String inputLine;
    int a=0;
    try {
        //feed line by line
        FileReader fr = new FileReader(jFileChooser1.getSelectedFile());
        BufferedReader reader = new BufferedReader(fr);
        while ((inputLine = reader.readLine()) != null)
        {
            try {
                a++;
                jProgressBar.setValue(a);
                pa.parse(inputLine);  //decode the line
            } catch ... catches errors and send to logger
            } finally {
                logrow=new LogData(pa,a);
                mLogTable.addRow(logrow);//store the decoded line
            }
        } 
        reader.close();
    } catch ... catches errors and send to logger
このコードはpa.parse(inputLine);、入力行を an に送信する行を解析しANTLRStringStream、次に aCharStreamを解析してから解析します。次にlogrow=new LogData(pa,a);、テーブルに格納されるデコードされた値を取得します。
私のプロファイリングは、私の文法から構築されたレクサーおよびパーサー クラス (つまり、LogGrammarLexer および LogGrammarParser) にホットスポットがあることを示しています。それが十分に明確であることを願っています...
解析:
LogGrammarLexer lexer = new LogGrammarLexer(inStream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
decoded = new LogGrammarParser(tokens);
try {
    failurePosition="";
    decoded.logLine();
} catch (RecognitionException e) {
    failurePosition=Integer.toString(e.charPositionInLine);
} catch (Exception e) {
  failurePosition="-3";
  throw e;
} finally {
    return decoded;//TODO: see if return is necessary as decoded is now a field in class
}
また、私は読んでいて、マルチスレッドファイルI / Oが役に立たないことを知っています... とにかく、改善する必要があるのは、ファイル内の各行の複雑なデコード/解析を行う文法用に構築されたクラス内のパフォーマンスです.
だから私の問題はそれをマルチスレッドにする方法です、
乾杯