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倍
--------------------编程问答-------------------- 换电脑。。。。。。。。 --------------------编程问答--------------------
去掉就取不到信息?有这等事?我怎么没有碰到过的。。 --------------------编程问答-------------------- 你把你要取的网页地址发来看下。 --------------------编程问答-------------------- 你确定你的正则表达式没有问题么? --------------------编程问答--------------------
1.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,我说错了,去掉 RegexOptions.IgnoreCase 只能提取 字符是大写的信息,小写的都提取不到,搜索很久才搜索出全是大写符合表达式的信息。
2.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,但是去掉后仍然占用很大的CPU资源,怎么办?
3.上面的正则表达式是从网络上COPY的,因此可能有错,我自己用的是另外的,但是占用CPU问题和表达式没有关系吧
4.hui_play:不用正则用什么办法提取里边的信息?要提取源码里边的邮箱的话,怎么提取?
5.现在的情况是用与不用RegexOptions.Compiled 都占用很多CPU资源,该怎么办?
--------------------编程问答--------------------
同问...待解...
--------------------编程问答-------------------- 换cpu算了 --------------------编程问答-------------------- 把你要提取的网页地址发来看了。
这样大家好帮你解决问题。 --------------------编程问答--------------------
我用的网址是软件在网页里提取的,用多线程不断提取,不断处理
因此给出某个网页应该不能找出问题吧 --------------------编程问答-------------------- 1.正则表达式的提取本来就运算量比较大
所以CPU利用率很高也正常,但是你可以将你的线程数设置为比你CPU的核心数量少1,来保证还有剩余的CPU资源来流畅的响应UI
2.同样的CPU利用率,加了RegexOptions.Compiled,肯定会有更快的处理速度
3.DoNet里对正则的实现确实不敢恭维,至少我知道perl的正则要比它快很多,当然也可能因为perl是一种懒人写的东西,忽略了一些意义不大的规则,而DoNet实现的肯定是完全按照标准来的
4.正则表达式的执行速度很大程度取决于你写的质量,提取同样的内容,有不同的写法,有的效率极高,有的效率极差
--------------------编程问答-------------------- 没遇到过 帮顶。。 --------------------编程问答--------------------
请教以下两个邮箱正则表达式 预计效率如何? 可以优化吗?
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#