zoukankan      html  css  js  c++  java
  • 转自Discuz!NT代震军的blog,修改名字为Regex的效率的奇怪的问题,哈哈

    在.net1.4322 和.net2.0下,如下代码运行速度差近50倍,至今还未找到原因,目前的解决方法是在静态构造函数中直接进行声明,以提升速度,如果大家有兴趣可以看一下

    RegexOptions.Compiled 这个正则项,我猜在vs2005下的框架有一些变化。

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;


    using System.Text;
    using System.Text.RegularExpressions;

    public partial class admin_RetTest2 : System.Web.UI.Page
    {

        
    public static Regex[] r=new Regex[10];

        
    static admin_RetTest2()
        

            r[
    0]=new Regex(@"<%template ([^\[\]\{\}\s]+)%>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    1]=new Regex(@"<%template ([^\[\]\{\}\s]+)%>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    2]=new Regex(@"<%loop ([^\[\]\{\}\s]+) ([^\[\]\{\}\s]+)%>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    3]= new Regex(@"<%\/loop%>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    4= new Regex(@"<%if ([^\s]+)%>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    5= new Regex(@"<%else%>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    6= new Regex(@"<%\/if%>", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    7= new Regex(@"(\{strtoint\(([^\s]+?)\)\})", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    8= new Regex(@"(\{urlencode\(([^\s]+?)\)\})", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            r[
    9= new Regex(@"(\{([^\.\[\]\{\}\s]+)\.([^\[\]\{\}\s]+)\})", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.Singleline);
            
        }


        
    public string strTemplate = "adfadsf ,adfadf aasdfadfwfadf adfadfwacx adfrafdda swfdfad";
      

        
    protected void Page_Load(object sender, EventArgs e)
        
    {
            



            
            ShowTime(
    "有 RegexOptions.Compiled 开始");
            
    for (int i = 0; i < 100; i++)
            
    {
                
    for (m = r[0].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(), "\r\n");
                }


                
    for (m = r[2].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(),
                       
    "\r\n\tint " + m.Groups[1].ToString() + "__loop__id=0;\r\n\tforeach(DataRow " + m.Groups[1].ToString() + " in " + m.Groups[2].ToString() + ".Rows)\r\n\t{\r\n\t\t" + m.Groups[1].ToString() + "__loop__id++;\r\n");
                }



                
    for (m = r[3].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(),
                        
    "\r\n\t}\t//end loop\r\n");
                }


                
    for (m = r[4].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(),
                        
    "\r\n\tif(" + m.Groups[1].ToString() + ")\r\n\t{\r\n");
                }


     

                
    for (m = r[5].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(),
                        
    "\r\n\t}\r\n\telse\r\n\t{\r\n");
                }


                
    for (m = r[6].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(),
                        
    "\r\n\t}\t//end if\r\n");
                }


                
    for (m = r[7].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(), ", 0)");
                }


                
    for (m = r[8].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {
                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(),
                        
    "Utils.UrlEncode(" + m.Groups[2].ToString() + ")");
                }



                
    //解析{var.a}
                for (m = r[9].Match(strTemplate); m.Success; m = m.NextMatch())
                
    {

                    strTemplate 
    = strTemplate.Replace(m.Groups[0].ToString(),
                        
    "\" + " + m.Groups[2].ToString() + ".ToString().Trim() + \"");


                }

            }

            ShowTime(
    "有 RegexOptions.Compiled 结束");

            
        }


        
    public void ShowTime(string name)
        
    {
            DateTime dt 
    = DateTime.Now;
            Response.Write(
    "<br>" + name + dt.Minute.ToString() +""+ dt.Second.ToString() +"" + dt.Millisecond.ToString()+"毫秒");
        }

    }

  • 相关阅读:
    SSH深度历险(五) 深入浅出-----IOC AND AOP
    Hbuilder X下载及安装教程
    如何用Prometheus监控十万container的Kubernetes集群
    使用并部署Flutter Web的步骤实例
    回顾 Android 11 中的存储机制更新
    移动端UI一致性解决方案
    使用 tail 结合 grep 查找日志关键字并高亮及显示所在行上下文
    Nginx PHP 报504 Gateway time-out错误的解决方法
    SPSS 24 安装详细教程及下载
    CoRL 2020奖项公布,斯坦福获最佳论文奖,华为等摘得最佳系统论文奖
  • 原文地址:https://www.cnblogs.com/kokoliu/p/610925.html
Copyright © 2011-2022 走看看