J'essaye d'analyser un gros fichier (environ 500 Mo) avec Antlr4 en utilisant C#. Mais j'ai une exception OutOfMemoryException.Comment résoudre OutOfMemoryException lors de l'analyse de fichiers volumineux avec Antlr4 dans C#?
Mon code actuel est décrit ci-dessous:
var path = GetInput(Path.Combine(DatFilePath)); // Build the large file
var inputStream = new StreamReader(path);
var input = new UnbufferedCharStream(inputStream);
GroupGrammarLexer lexer = new GroupGrammarLexer(input);
lexer.TokenFactory = new CommonTokenFactory(true);
var tokens = new UnbufferedTokenStream(lexer);
GroupGrammarParser parser = new GroupGrammarParser(tokens);
parser.BuildParseTree = false;
GroupGrammarParser.FileContext tree = parser.file(); // here I get OutOfMemoryException
Ma grammaire:
grammaire GroupGrammar;
/*
* Parser Rules
*/
file: row+;
row: group | comment | not;
group: GROUP NAME ATTACHTO NAME;
comment: '**' .*? NL;
not: .*? NL;
GROUP : '*'? G R O U P ;
ATTACHTO : '*'? A T T A C H T O ;
W : ('W'|'w') ;
E : ('E'|'e') ;
L : ('L'|'l') ;
G : ('G'|'g') ;
R : ('R'|'r') ;
O : ('O'|'o') ;
U : ('U'|'u') ;
P : ('P'|'p') ;
A : ('A'|'a') ;
T : ('T'|'t') ;
C : ('C'|'c') ;
H : ('H'|'h') ;
NAME : '\''[a-zA-Z0-9_]+'\'' ;
WS: (' ') -> skip;
NL: '\r'? '\n';
J'ai jeté tous les conseils sur les fichiers volumineux, mais je reçois toujours l'exception OutOfMemoryException. Lorsque je teste ce code avec un fichier plus petit, cela fonctionne très bien.
Y at-il quelque chose qui me manque?
J'apprécie pour toute aide.
Cordialement
Est-il possible de briser le gros fichier en plus petits? Et analyser chaque plus petit en tant que fichier séparé dans son propre arbre. J'espère que cela ne mettra pas en péril la logique de votre entreprise. – smwikipedia