当我阅读以下内容时,我正在阅读this关于regular expressions
的 dotnetperls.com 文章:(强调我的) < / p>
...我们发现使用Regex实例对象比使用静态Regex.Match更快。为了提高性能,应始终使用实例对象。
我原本以为使用static
方法会更快,因为我怀疑它们的regex.match相同,但实例需要初始化(当然需要时间)。
静态方法没有实例。它们使用类型名称调用,而不是实例标识符。由于这个原因,比实例方法略快。
但是为什么RegEx实例会比静态类更快?
答案 0 :(得分:2)
对于要执行的静态正则表达式匹配,Regex对象需要将模式转换为可以执行的结构(通过创建内部Regex实例),并且需要搜索传递给Match的字符串,以及这样可以缓存内部Regex实例,以便在后续调用中更快地执行。因此,当您第一次执行静态匹配时,所花费的时间大约为:
后续调用或多或少:
使用实例对象,您可以在该实例上创建实例并调用匹配 - 没有时间查看或管理内部缓存,实例上的每个后续调用仅执行匹配逻辑。因此,在这种情况下,实例匹配总是比静态匹配更快。
一般来说,调用静态方法(稍微)会比调用等效的实例方法更快,但只有当方法执行完全相同的操作时才会这样做,这是不可能的,因为静态方法不能有实例状态......