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

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

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

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

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

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

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


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

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

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

【编辑推荐】

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

2009-08-07 14:24:31

.NET正则表达式

2012-01-12 10:21:57

正则表达式

2021-05-25 09:18:04

正则表达式Linux字符串

2018-09-27 15:25:08

正则表达式前端

2009-08-07 14:31:40

.NET正则表达式基础

2020-09-04 09:16:04

Python正则表达式虚拟机

2020-11-04 09:23:57

Python

2010-01-05 17:46:04

.NET Framew

2011-05-11 17:40:30

PHP正则表达式

2024-09-14 09:18:14

Python正则表达式

2009-03-24 08:56:15

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

2009-08-24 17:14:41

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

2024-01-04 08:25:03

String表达式工具

2009-04-22 15:06:16

正则表达式PHP特殊字符

2009-06-15 17:24:59

Groovy正则表达式

2009-10-27 10:14:54

VB.NET正则表达式

2009-09-16 17:15:57

正则表达式引擎

2022-01-04 11:35:03

Linux Shel正则表达式Linux

2023-09-13 08:12:45

2016-11-10 16:21:22

Java 正则表达式
点赞
收藏

51CTO技术栈公众号