缓存多个动态生成的Regex表达式到磁盘

本文关键字:Regex 表达式 磁盘 动态 缓存 | 更新日期: 2023-09-27 18:16:09

我有一个正在开发的程序,它使用了大量(>100)动态生成的Regex表达式。每个regex都被用于处理大量字符串(取决于情况,这可能大于2k),所以我编译了它们,并在内部缓存它们的使用。但是,程序会重复运行(它是构建工具的一部分),并且每次程序启动时,编译这些动态生成的表达式都要花费大量时间。我已经有了一个磁盘缓存(如果缓存有效,则不需要解析),并且可以将编译后的Regex表达式存储在其中,但是我似乎找不到正确的方法来做到这一点。我首先想到的是使用正则表达式。CompileToAssembly,但是Mono不支持它,并且程序需要在Mono和MS.net上运行。正因为如此,我找不到一个缓存表达式的好方法。我只需要从编译的Regex的IsMatch(string)方法,我确实有修改Mono Regex实现的选项,并将其包括在我的程序中,但我不知道从哪里开始。

缓存多个动态生成的Regex表达式到磁盘

您可以创建另一个程序,它将在构建步骤中编译表达式。然后在项目中提供已编译的程序集。这将消除不支持Regex的问题。CompileToAssembly on Mono.

这不是一个完整的解决方案,但我能够使用二进制序列化在有缓存的情况下比没有缓存的情况下在启动时间上产生明显的改进。我怀疑这实际上只是节省了解析正则表达式的时间,而且它仍然需要进行实际的编译,但对于我需要的东西来说,这已经足够好了。