我有一个我正在使用的程序,该程序使用非常大量(> 100)的动态生成的Regex表达式。每个正则表达式都用于对大量的字符串(取决于具体情况,这可能是> 2k),所以我编译它们,并在内部缓存它们的使用。但是,程序会重复运行(它是构建工具的一部分),并且每次程序启动时编译这些动态生成的表达式都会花费大量时间。我已经有一个磁盘缓存(如果缓存有效则不需要解析),并且可以将已编译的Regex表达式存储在其中,但是我似乎无法找到正确执行此操作的方法。我首先想到使用Regex.CompileToAssembly,但是Mono不支持它,程序需要在Mono和MS.net上运行。因此,我无法找到一种缓存表达式的好方法。我只需要编译的Regex中的IsMatch(string)方法,我可以选择修改Mono Regex实现并将其包含在我的程序中,但我不知道从哪里开始。
答案 0 :(得分:0)
您可以创建另一个程序,它将在构建步骤中编译表达式。然后为您的项目提供已编译的程序集。这将消除Mono上不支持Regex.CompileToAssembly的问题。
答案 1 :(得分:0)
这不是一个完整的解决方案,但是我能够使用二进制序列化来在缓存与非缓存的情况下在启动时间方面产生明显的改进。我怀疑大部分时间实际上是节省解析正则表达式的时间,而且它仍然需要进行实际编译,但这对于我需要的东西来说是足够好的差异。