仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1020|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之C#关于正则表达式婚配无非常资本耗尽的...

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:49:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
我感觉可以顶到50楼,出乎意料的是大家居然纷纷写出自己的博文,还被编辑做成了专题,置于首页头条。办理|正则  在c#中利用正则表达式举行婚配,偶然候我们会碰到这类情形,cpu利用率100%,可是正则表达式并没有非常抛出,正则一向处于婚配过程当中,这将招致体系资本被耗尽,使用程序被卡住,这是因为正则不完整婚配,并且Regex中没有Timeout属性,使正则处置器堕入了逝世轮回。
  这类情形特别大概产生在对非牢靠的被婚配工具的婚配过程当中,比方在我的团体网站www.eahan.com项目中,对多个网站页面的主动收罗婚配,就常常产生该成绩。为了不资本耗尽的情形产生,我写了一个AsynchronousRegex类,望文生义,异步的Regex。给该类一个设置一个Timeout属性,将Regex婚配的举措置于独自的线程中,AsynchronousRegex监控Regex婚配凌驾Timeout限制时烧毁线程。
usingSystem;
usingSystem.Text.RegularExpressions;
usingSystem.Threading;
namespaceLZT.Eahan.Common
{
publicclassAsynchronousRegex
{
privateMatchCollectionmc;
privateint_timeout;//最长休眠工夫(超时),毫秒
privateintsleepCounter;
privateintsleepInterval;//休眠距离,毫秒
privatebool_isTimeout;
publicboolIsTimeout
{
get{returnthis._isTimeout;}
}
publicAsynchronousRegex(inttimeout)
{
this._timeout=timeout;
this.sleepCounter=0;
this.sleepInterval=100;
this._isTimeout=false;
this.mc=null;
}
publicMatchCollectionMatchs(Regexregex,stringinput)
{
Regr=newReg(regex,input);
r.OnMatchComplete+=newReg.MatchCompleteHandler(this.MatchCompleteHandler);

Threadt=newThread(newThreadStart(r.Matchs));
t.Start();
this.Sleep(t);
t=null;
returnmc;
}
privatevoidSleep(Threadt)
{
if(t!=null&&t.IsAlive)
{
Thread.Sleep(TimeSpan.FromMilliseconds(this.sleepInterval));
this.sleepCounter++;
if(this.sleepCounter*this.sleepInterval>=this._timeout)
{
t.Abort();
this._isTimeout=true;
}
else
{
this.Sleep(t);
}
}
}
privatevoidMatchCompleteHandler(MatchCollectionmc)
{
this.mc=mc;
}
classReg
{
internaldelegatevoidMatchCompleteHandler(MatchCollectionmc);
internaleventMatchCompleteHandlerOnMatchComplete;
publicReg(Regexregex,stringinput)
{
this._regex=regex;
this._input=input;
}
privatestring_input;
publicstringInput
{
get{returnthis._input;}
set{this._input=value;}
}
privateRegex_regex;
publicRegexRegex
{
get{returnthis._regex;}
set{this._regex=value;}
}
internalvoidMatchs()
{
MatchCollectionmc=this._regex.Matches(this._input);
if(mc!=null&&mc.Count>0)//这里有大概形成cpu资本耗尽
{
this.OnMatchComplete(mc);
}
}
}
}
}
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。
小女巫 该用户已被删除
沙发
发表于 2015-1-20 05:15:16 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-28 17:32:09 来自手机 | 只看该作者
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
小魔女 该用户已被删除
地板
发表于 2015-2-5 22:20:26 | 只看该作者
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-13 22:43:40 | 只看该作者
主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。
若天明 该用户已被删除
6#
发表于 2015-3-4 02:34:06 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
因胸联盟 该用户已被删除
7#
发表于 2015-3-11 15:30:47 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-19 01:23:57 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
简单生活 该用户已被删除
9#
发表于 2015-3-27 01:07:13 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表