当你使用一个 Regex 实例时,它被用在一个方法中,该方法被调用几千次以某种方式解析事物,该方法应该包含 Regex 实例,还是 Regex 实例应该是类作为静态成员?
我觉得对同一个 Regex 进行数千次初始化可能是一种开销。但我主要关心的是最佳实践。
我应该在哪里声明和定义正则表达式?
编辑:伪代码:
static Regex regex ...
IEnumerable<string> Parse (string str)
{
var matches = // use regex
foreach (var match in matches)
{
...
}
}
void Main()
{
foreach (var page in pages)
{
Parse (page); ...
}
}
请您参考如下方法:
包装解析功能的类应该包含对正则表达式的私有(private)引用(如果它是静态用法,则可能是静态的),如果您担心那种东西的话。
编辑:
对我来说,这与性能无关,因为存在内部缓存和 Jimmy 提到的所有爵士乐,我认为创建正则表达式可能不如实际正则表达式处理昂贵。它更多地是关于设计原则:工厂方法或解析实用程序在概念上使用一些内部过滤器(正则表达式)为您生成列表。如果它是反复使用的同一个,从概念上讲,这就是您创建一次,然后一直保留并反复使用的东西。
