zoukankan
html css js c++ java
转自Discuz!NT代震军的blog,修改名字为Regex的效率的奇怪的问题,哈哈
在.net1.
4322
和.net2.0下,如下代码运行速度差近50倍,至今还未找到原因,目前的解决方法是在静态构造函数中直接进行声明,以提升速度,如果大家有兴趣可以看一下
RegexOptions.Compiled 这个正则项,我猜在vs2005下的框架有一些变化。
using
System;
using
System.Data;
using
System.Configuration;
using
System.Collections;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
using
System.Text;
using
System.Text.RegularExpressions;
public
partial
class
admin_RetTest2 : System.Web.UI.Page
{
public
static
Regex[] r
=
new
Regex[
10
];
static
admin_RetTest2()
{
r[
0
]
=
new
Regex(
@"
<%template ([^\[\]\{\}\s]+)%>
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
1
]
=
new
Regex(
@"
<%template ([^\[\]\{\}\s]+)%>
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
2
]
=
new
Regex(
@"
<%loop ([^\[\]\{\}\s]+) ([^\[\]\{\}\s]+)%>
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
3
]
=
new
Regex(
@"
<%\/loop%>
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
4
]
=
new
Regex(
@"
<%if ([^\s]+)%>
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
5
]
=
new
Regex(
@"
<%else%>
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
6
]
=
new
Regex(
@"
<%\/if%>
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
7
]
=
new
Regex(
@"
(\{strtoint\(([^\s]+?)\)\})
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
8
]
=
new
Regex(
@"
(\{urlencode\(([^\s]+?)\)\})
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
r[
9
]
=
new
Regex(
@"
(\{([^\.\[\]\{\}\s]+)\.([^\[\]\{\}\s]+)\})
"
, RegexOptions.Compiled
|
RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
}
public
string
strTemplate
=
"
adfadsf ,adfadf aasdfadfwfadf adfadfwacx adfrafdda swfdfad
"
;
protected
void
Page_Load(
object
sender, EventArgs e)
{
#region
Regex r1
=
new
Regex(
@"
<%template ([^\[\]\{\}\s]+)%>
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
Match m;
ShowTime(
"
无 RegexOptions.Compiled 开始
"
);
for
(
int
i
=
0
; i
<
100
; i
++
)
{
r1
=
new
Regex(
@"
<%template ([^\[\]\{\}\s]+)%>
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n
"
);
}
r1
=
new
Regex(
@"
<%loop ([^\[\]\{\}\s]+) ([^\[\]\{\}\s]+)%>
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\tint
"
+
m.Groups[
1
].ToString()
+
"
__loop__id=0;\r\n\tforeach(DataRow
"
+
m.Groups[
1
].ToString()
+
"
in
"
+
m.Groups[
2
].ToString()
+
"
.Rows)\r\n\t{\r\n\t\t
"
+
m.Groups[
1
].ToString()
+
"
__loop__id++;\r\n
"
);
}
r1
=
new
Regex(
@"
<%\/loop%>
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\t}\t//end loop\r\n
"
);
}
r1
=
new
Regex(
@"
<%if ([^\s]+)%>
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\tif(
"
+
m.Groups[
1
].ToString()
+
"
)\r\n\t{\r\n
"
);
}
r1
=
new
Regex(
@"
<%else%>
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\t}\r\n\telse\r\n\t{\r\n
"
);
}
r1
=
new
Regex(
@"
<%\/if%>
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\t}\t//end if\r\n
"
);
}
r1
=
new
Regex(
@"
(\{strtoint\(([^\s]+?)\)\})
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
, 0)
"
);
}
r1
=
new
Regex(
@"
(\{urlencode\(([^\s]+?)\)\})
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
Utils.UrlEncode(
"
+
m.Groups[
2
].ToString()
+
"
)
"
);
}
//
解析{var.a}
r1
=
new
Regex(
@"
(\{([^\.\[\]\{\}\s]+)\.([^\[\]\{\}\s]+)\})
"
, RegexOptions.IgnoreCase
|
RegexOptions.Singleline);
for
(m
=
r1.Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\
"
+
"
+ m.Groups[2].ToString() +
"
.ToString().Trim()
+
\
""
);
}
}
ShowTime(
"
无 RegexOptions.Compiled 结束
"
);
#endregion
ShowTime(
"
有 RegexOptions.Compiled 开始
"
);
for
(
int
i
=
0
; i
<
100
; i
++
)
{
for
(m
=
r[
0
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n
"
);
}
for
(m
=
r[
2
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\tint
"
+
m.Groups[
1
].ToString()
+
"
__loop__id=0;\r\n\tforeach(DataRow
"
+
m.Groups[
1
].ToString()
+
"
in
"
+
m.Groups[
2
].ToString()
+
"
.Rows)\r\n\t{\r\n\t\t
"
+
m.Groups[
1
].ToString()
+
"
__loop__id++;\r\n
"
);
}
for
(m
=
r[
3
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\t}\t//end loop\r\n
"
);
}
for
(m
=
r[
4
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\tif(
"
+
m.Groups[
1
].ToString()
+
"
)\r\n\t{\r\n
"
);
}
for
(m
=
r[
5
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\t}\r\n\telse\r\n\t{\r\n
"
);
}
for
(m
=
r[
6
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\r\n\t}\t//end if\r\n
"
);
}
for
(m
=
r[
7
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
, 0)
"
);
}
for
(m
=
r[
8
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
Utils.UrlEncode(
"
+
m.Groups[
2
].ToString()
+
"
)
"
);
}
//
解析{var.a}
for
(m
=
r[
9
].Match(strTemplate); m.Success; m
=
m.NextMatch())
{
strTemplate
=
strTemplate.Replace(m.Groups[
0
].ToString(),
"
\
"
+
"
+ m.Groups[2].ToString() +
"
.ToString().Trim()
+
\
""
);
}
}
ShowTime(
"
有 RegexOptions.Compiled 结束
"
);
}
public
void
ShowTime(
string
name)
{
DateTime dt
=
DateTime.Now;
Response.Write(
"
<br>
"
+
name
+
dt.Minute.ToString()
+
"
分
"
+
dt.Second.ToString()
+
"
秒
"
+
dt.Millisecond.ToString()
+
"
毫秒
"
);
}
}
查看全文
相关阅读:
[CF149D] Coloring Brackets(区间dp)
[CF1437E] Make It Increasing(LIS)
洛谷试题之跳石头
【模板】深搜和广搜
高精度阶乘
【模板】拓扑排序
【模板】最小生成树——Kruskal算法
判断素数的方法
高精度乘法
高精度加法
原文地址:https://www.cnblogs.com/kokoliu/p/610925.html
最新文章
HTTP学习目录
博客内容进度插件的实现
前端学PHP之正则表达式基础语法
前端学PHP之正则表达式函数
数据结构模板
11.3 AHSOFNU 校内模拟
10.29 FJ四校联考
10.27 AHSOFNU 校内模拟(泉七)
10.25 AHSOFNU 校内模拟
10.22 AHSOFNU 校内模拟
热门文章
广州集训 Day1-2(PPT)
模板 基础数据结构
Codeforces Round #697 (Div. 3) (A
[P2602] [ZJOI2010]数字计数(数位dp)
[gym102471E] Flow(贪心)
[CF1450D] Rating Compression(树状数组+单调栈)
[洛谷P1967] 货车运输(最小生成树+树剖+RMQ)
[CF570D] Tree Requests(dsu on tree)
[SPOJ] DQUERY(线段树求区间不同数个数)
[P2607] [ZJOI2008]骑士 (树形dp+并查集)
Copyright © 2011-2022 走看看