首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegexOptions.Compiled是如何工作的?

RegexOptions.Compiled是如何工作的?
EN

Stack Overflow用户
提问于 2009-02-04 21:21:23
回答 4查看 40.1K关注 0票数 180

当您将正则表达式标记为要编译的正则表达式时,幕后发生了什么?这与缓存的正则表达式相比/有什么不同?

使用这些信息,您如何确定与性能提升相比,何时计算成本可以忽略不计?

EN

回答 4

Stack Overflow用户

发布于 2009-02-04 21:31:00

BCL团队博客中的这篇文章给出了一个很好的概述:"Regular Expression performance“。

简而言之,有三种类型的正则表达式(每种类型的执行速度都比前一种快):

  1. interpreted

在飞行中创建快,慢到execute

  • compiled (你想问的那个)

动态创建速度较慢,执行速度较快(适合在loops)

  • pre-compiled中执行

在您的应用程序编译时创建(无运行时创建损失),快速执行

因此,如果您打算只执行一次正则表达式,或者在应用程序的非性能关键部分(即用户输入验证)中执行正则表达式,则可以使用选项1。

如果您打算在循环中运行正则表达式(即逐行解析文件),则应该使用选项2。

如果你有很多的正则表达式,这些正则表达式在你的应用程序中永远不会改变,并且被频繁使用,那么你可以选择选项3。

票数 45
EN

Stack Overflow用户

发布于 2009-02-04 21:37:53

应该注意的是,从MRU2.0开始,使用未编译正则表达式的.NET缓存改进了正则表达式的性能。Regex库代码不再每次都重新解释相同的未编译正则表达式。

因此,使用已编译的动态正则表达式可能会带来更大的性能损失。除了加载时间较慢外,系统还使用更多内存将正则表达式编译为操作码。

从本质上讲,当前的建议是要么不编译正则表达式,要么提前将它们编译到单独的程序集中。

参考: BCL团队博客Regular Expression performance [David Gutierrez]

票数 9
EN

Stack Overflow用户

发布于 2009-02-04 21:34:08

1) Base Class Library Team on compiled regex

2) Coding Horror, referencing #1 with some good points on the tradeoffs

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/513412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档