本帖最后由 ghiurt235 于 2011-08-19 16:32:49 编辑

解决方案 »

  1.   

    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倍
      

  2.   


    1.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,我说错了,去掉 RegexOptions.IgnoreCase 只能提取 字符是大写的信息,小写的都提取不到,搜索很久才搜索出全是大写符合表达式的信息。2.gdstfox:去掉 RegexOptions.Compiled 是可以提取的,但是去掉后仍然占用很大的CPU资源,怎么办?3.上面的正则表达式是从网络上COPY的,因此可能有错,我自己用的是另外的,但是占用CPU问题和表达式没有关系吧4.hui_play:不用正则用什么办法提取里边的信息?要提取源码里边的邮箱的话,怎么提取?5.现在的情况是用与不用RegexOptions.Compiled 都占用很多CPU资源,该怎么办?
      

  3.   

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

  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}