1

System.Text.RegularExpressions.Regex我正在移植一个用于解析 C/C++ 包含源文件的 C# 软件。它们作为字符串完全加载到内存中,然后只用正则表达式处理。

它在 Windows 上完美运行,但在 Linux 上运行的 Mono 在尝试解析较大的文件时失败,并引发了从 deep inside 引发的堆栈溢出异常System.Text.RegularExpressions.Interpreter

该代码完全正确 - 它适用于 Windows。

有没有办法增加堆栈大小?还是我真的需要将较大的文件分成较小的块?

编辑:有问题的正则表达式如下所示:

    /** Regex that matches #include statements. */
    static Regex CPPHeaderRegex = new Regex(    "(([ \t]*#[ \t]*include[ \t]*[<\"](?<HeaderFile>[^\">]*)[\">][^\n]*\n)|([^\n]*\n))*", 
                                                RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.ExplicitCapture );

导致问题的源是 300kB (~8k SLOC) 或更大。

请注意,这不是我的代码,我继承了它。

4

0 回答 0