深爱那片海 发表于 2015-1-16 22:49:37

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

我感觉可以顶到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应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。

飘飘悠悠 发表于 2015-2-13 22:43:40

主流网站开发语言之ASP:ASP是微软(Microsoft)所开发的一种后台脚本语言,它的语法和VisualBASIC类似,可以像SSI(ServerSideInclude)那样把后台脚本代码内嵌到HTML页面中。虽然ASP简单易用,但是它自身存在着许多缺陷,最重要的就是安全性问题。

若天明 发表于 2015-3-4 02:34:06

微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。

因胸联盟 发表于 2015-3-11 15:30:47

主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。

愤怒的大鸟 发表于 2015-3-19 01:23:57

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。

简单生活 发表于 2015-3-27 01:07:13

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
页: [1]
查看完整版本: ASP.NET网站制作之C#关于正则表达式婚配无非常资本耗尽的...