当前位置:编程学习 > C#/ASP.NET >>

100分求正则"RegexOptions.Compiled"占用CPU过高问题

--------------------编程问答-------------------- 您可以不用正则提,我想也不会太慢,正则总出问题。 --------------------编程问答-------------------- 1.你的正则表达式写的就不对
2.正则表达式能否匹配成功与RegexOptions.Compiled没有任何关系
3.启动速度应该不是你的程序关心的问题,所以RegexOptions.Compiled一定要用,所以你也没必要用CompileToAssembly


我用的是这个正则:
@"http://([a-z0-9]|.|/|\\-)+\.(jpg)|(bmp)|(gif)|(png)"

使用RegexOptions.Compiled
1,000,000次匹配
耗时10.8秒
不使用RegexOptions.Compiled
1,000,000次匹配
耗时29.0秒

耗时大概在2~3倍
--------------------编程问答-------------------- 换电脑。。。。。。。。 --------------------编程问答--------------------
引用楼主 ghiurt235 的回复:
如果我把 RegexOptions.Compiled 去掉,CPU占用非常低,但提取不了任何信息。


去掉就取不到信息?有这等事?我怎么没有碰到过的。。 --------------------编程问答-------------------- 你把你要取的网页地址发来看下。 --------------------编程问答-------------------- 你确定你的正则表达式没有问题么? --------------------编程问答--------------------
引用 4 楼 gdstfox 的回复:
引用楼主 ghiurt235 的回复:

如果我把 RegexOptions.Compiled 去掉,CPU占用非常低,但提取不了任何信息。


去掉就取不到信息?有这等事?我怎么没有碰到过的。。


1.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,我说错了,去掉 RegexOptions.IgnoreCase 只能提取 字符是大写的信息,小写的都提取不到,搜索很久才搜索出全是大写符合表达式的信息。

2.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,但是去掉后仍然占用很大的CPU资源,怎么办?

3.上面的正则表达式是从网络上COPY的,因此可能有错,我自己用的是另外的,但是占用CPU问题和表达式没有关系吧

4.hui_play:不用正则用什么办法提取里边的信息?要提取源码里边的邮箱的话,怎么提取?

5.现在的情况是用与不用RegexOptions.Compiled 都占用很多CPU资源,该怎么办?



--------------------编程问答--------------------
引用 7 楼 ghiurt235 的回复:
引用 4 楼 gdstfox 的回复:

引用楼主 ghiurt235 的回复:

如果我把 RegexOptions.Compiled 去掉,CPU占用非常低,但提取不了任何信息。


去掉就取不到信息?有这等事?我怎么没有碰到过的。。


1.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,我说错了,去掉 RegexOptions.Igno……

同问...待解...

--------------------编程问答-------------------- 换cpu算了 --------------------编程问答-------------------- 把你要提取的网页地址发来看了。

这样大家好帮你解决问题。 --------------------编程问答--------------------
引用 10 楼 gdstfox 的回复:
把你要提取的网页地址发来看了。

这样大家好帮你解决问题。


我用的网址是软件在网页里提取的,用多线程不断提取,不断处理

因此给出某个网页应该不能找出问题吧 --------------------编程问答-------------------- 1.正则表达式的提取本来就运算量比较大
所以CPU利用率很高也正常,但是你可以将你的线程数设置为比你CPU的核心数量少1,来保证还有剩余的CPU资源来流畅的响应UI
2.同样的CPU利用率,加了RegexOptions.Compiled,肯定会有更快的处理速度
3.DoNet里对正则的实现确实不敢恭维,至少我知道perl的正则要比它快很多,当然也可能因为perl是一种懒人写的东西,忽略了一些意义不大的规则,而DoNet实现的肯定是完全按照标准来的
4.正则表达式的执行速度很大程度取决于你写的质量,提取同样的内容,有不同的写法,有的效率极高,有的效率极差


引用 7 楼 ghiurt235 的回复:
引用 4 楼 gdstfox 的回复:

引用楼主 ghiurt235 的回复:

如果我把 RegexOptions.Compiled 去掉,CPU占用非常低,但提取不了任何信息。


去掉就取不到信息?有这等事?我怎么没有碰到过的。。


1.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,我说错了,去掉 RegexOptions.Igno……
--------------------编程问答-------------------- 没遇到过 帮顶。。 --------------------编程问答--------------------
引用 12 楼 icedmilk 的回复:
1.正则表达式的提取本来就运算量比较大
所以CPU利用率很高也正常,但是你可以将你的线程数设置为比你CPU的核心数量少1,来保证还有剩余的CPU资源来流畅的响应UI
2.同样的CPU利用率,加了RegexOptions.Compiled,肯定会有更快的处理速度
3.DoNet里对正则的实现确实不敢恭维,至少我知道perl的正则要比它快很多,当然也可能因为perl是一种懒人写的东西,忽略了一……


请教以下两个邮箱正则表达式 预计效率如何? 可以优化吗?

1.[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,6}
2.[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}


--------------------编程问答-------------------- 来学习哈 --------------------编程问答-------------------- 没遇到过
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,