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()
+
"
毫秒
"
);
}
}
查看全文
相关阅读:
机器学习决策树
Apriori算法实战福彩双色球
机器学习Random Forest算法简介
机器学习CART决策树
基本算法求最大子数组和 及其变种
【语言处理与Python】3.6规范化文本
【语言处理与Python】3.3使用Unicode进行文字处理
【语言处理与Python】3.2字符串:最底层的文本处理
【语言处理与Python】4.1回到基础
【语言处理与Python】3.7用正则表达式为文本分词
原文地址:https://www.cnblogs.com/kokoliu/p/610925.html
最新文章
服务器上无法使用XSN的问题
工作流不发送邮件给审批人Approval Workflow does not send Email to approvers
Sharepoint and .resx files with workflow task form
SharePoint2007知识点总结
代码模拟用户登陆
petshop面向接口的思考
Profile及成员资料管理一
事务的困惑
Order策略模式
将匿名用户转换为注册用户处理
热门文章
简单工厂与抽象工厂
页面的生命周期(待续)
web层的控件之SearchControl
Profile及成员资料管理二
IList和List的思考
机器学习AdaBoosting及其Java实现
基本算法堆排序及其Java实现
基本算法0/1背包问题
Mahout学习笔记推荐算法
Ubuntu下Storm安装(单机,分布式)
Copyright © 2011-2022 走看看