.NET程序中的正则表达式性能问题

开发 后端
笔者在Web程序中错误的使用了RegexOptions.Compiled选项导致性能下降,这里将探讨一下.NET程序中的正则表达式性能问题。

之前在web程序中错误的使用了RegexOptions.Compiled 选项,导致每个页面打开整度慢了接近0.5秒..
因为是在httpModule里过滤关键字,对性能比较敏感,做了个简单测试.  

Stopwatch w = new Stopwatch();  
          w.Start();  
          Regex r = new Regex(@".*", RegexOptions.Compiled );  
            Match m = r.Match("aaa");  
            if (m.Success)  
            {  
                w.Stop();  
                Response.Write(w.Elapsed.TotalSeconds.ToString("0.0000000"));            
            } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

不加RegexOptions.Compiled ,计时器显示0.0000x,添加RegexOptions.Compiled 后计数器显示0.00x
如果正则式写的在复杂一些,那么仅编译时间都要0.x秒了. 看来大部分应用使用RegexOptions.Compiled 反而会降低性能,除非是很BT的应用

.NET的正则表达使用NFA引擎,NFA引擎正则式的写法对性能的很大. 

 Regex r = new Regex(@"(a|[^a]+)*^" );  
 string  str="111111111111111111111111111111111";  
Match m = r.Match(str);  
             if (m.Success)  
             {  
                 Response.Write(w.Elapsed.TotalSeconds.ToString("0.0000000"));  
                
             } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.


只要str长度超过26基本上很匹配难完成.
以下这些都类似

(b|[^b]+)*^  
(c|[^c]+)*^  
 (^|[^^]+)*(^|[^^]+)*^    
(^|[^^]+|[^^]*)*^ 
  • 1.
  • 2.
  • 3.
  • 4.

看来正则的写法对性能影响挺大的

【编辑推荐】

  1. 介绍几个C#正则表达式工具
  2. 使用C#正则表达式匹配相关字符串
  3. C#正则表达式备忘录
  4. ASP.NET正则表达式的命名组和四向处理功能
  5. .NET正则表达式的历史
责任编辑:彭凡 来源: 博客园
相关推荐

2009-08-07 14:24:31

.NET正则表达式

2018-09-27 15:25:08

正则表达式前端

2012-01-12 10:21:57

正则表达式

2021-05-25 09:18:04

正则表达式Linux字符串

2020-09-04 09:16:04

Python正则表达式虚拟机

2009-08-07 14:31:40

.NET正则表达式基础

2020-11-04 09:23:57

Python

2024-09-14 09:18:14

Python正则表达式

2009-08-24 17:14:41

正则表达式C#和.NET框架

2009-03-24 08:56:15

正则表达式格式清理字符串

2011-05-11 17:40:30

PHP正则表达式

2009-10-27 10:14:54

VB.NET正则表达式

2024-01-04 08:25:03

String表达式工具

2010-03-25 18:25:36

Python正则表达式

2009-09-16 18:19:34

正则表达式组

2021-01-27 11:34:19

Python正则表达式字符串

2019-07-17 15:45:47

正则表达式字符串前端

2017-05-12 10:47:45

Linux正则表达式程序基础

2011-06-02 12:34:16

正则表达式

2009-02-18 09:48:20

正则表达式Java教程
点赞
收藏

51CTO技术栈公众号