c#程序员应该养成的程序性能优化写法

  

曾经在网上听过这样一句话

  

  

我非常赞同这句话,所以对于那些极度影响阅读的性能优化我就不在这里赘述了

  

<强>今天主要说的就是一些举手之劳即可完成的性能优化

  

<>强减少重复代码

  

这是最基本的优化方案,尽可能减少那些重复做的事,让他们只做一次

  

比较常见是这种代码,同样的Math.Cos(角)和sin(角)都做了2次

  

优化前         私人点RotatePt (pt)双角,点   {   点现成的=new点();   角=角;   现成的。X=(int) (pt(双)。X * Math.Cos(角)- pt(双)。Y * sin(角));   现成的。Y=(int) (pt(双)。X * sin(角)+(双)pt。Y * Math.Cos(角));   返回现成的;   }      

优化后         私人点RotatePt3 (pt)双角,点   {   点现成的=new点();   角=角;   双SIN_ANGLE=sin(角);   双COS_ANGLE=Math.Cos(角);   现成的。X=(int) (pt。X * COS_ANGLE——pt.Y * SIN_ANGLE);   现成的。Y=(int) (pt。X * SIN_ANGLE + pt.Y * COS_ANGLE);   返回现成的;   }      

还有另一种,在方法中实例化一个对象,但是这个对象其实是可以复用的

        公共静态字符串ConvertQuot (html字符串)   {   Regex Regex=新的正则表达式(”,(“| # 34);”,RegexOptions.IgnoreCase);   返回正则表达式。替换(html、“\”);   }      

优化后         只读的静态Regex ReplaceQuot=新的正则表达式(”,(“| # 34);”,RegexOptions。IgnoreCase | RegexOptions.Compiled);   公共静态字符串ConvertQuot (html字符串)   {   ReplaceQuot返回。替换(html、“\”);   }      

还有一种是不必要的初始化,比如调用出参数之前,是不需要初始化的

        公共bool检查(int userid)   {   var=新用户();   如果(GetUser(用户id,用户))   {   返回用户。水平比;1;   }   返回错误;   }      

这里的新用户()就是不必要的操作,

  

优化后         公共bool检查(int userid)   {   用户用户;   如果(GetUser(用户id,用户))   {   返回用户。水平比;1;   }   返回错误;   }      

<强>不要迷信正则表达式

  

正好在第一个栗子里说到了正在表达式(正则表达式)对象就顺便一起说了

  

很多人以为正则表达式很快,非常快,超级的快

  

虽然正则表达式是挺快的,不过千万不要迷信他,不信你看下面的栗子

        1//方法   公共静态字符串ConvertQuot1 (html字符串)   {   返回html.Replace(“和”;"," \ " ")。替换(" "," \ " ");   }      只读的静态Regex ReplaceQuot=新的正则表达式(”,(“| # 34);”,RegexOptions。IgnoreCase | RegexOptions.Compiled);//方法2   公共静态字符串ConvertQuot2 (html字符串)   {   ReplaceQuot返回。替换(html、“\”);   }      

有多少人认为正则表达式比较快的,举个手& # 63;& # 63;

  

 C #程序员应该养成的程序性能优化写法

  

结果为10 w次循环的时间,即使是10个取代连用,也比正则表达式好,所以不要迷信他

        1//方法   公共静态字符串ConvertQuot1 (html字符串)   {   返回的html。替换(“0”,“”)。替换(“1”,“”)。替换(“2”,“”)。替换(“3”,“”)。替换(“4”、“”)。替换(“5”,“”)。替换(“6”,“”)。替换(“7”,“”)。替换(“8”、“”)。替换(“9”,“”);   }      只读的静态Regex ReplaceQuot=new Regex (“[1234567890]”, RegexOptions。IgnoreCase | RegexOptions.Compiled);//方法2   公共静态字符串ConvertQuot2 (html字符串)   {   ReplaceQuot返回。替换(html”、“);   }      

ConvertQuot1:3518
  ConvertQuot2:12479

  

最后给你们看一个真实的,杯具的栗子

        Htmlstring=正则表达式。替换(Htmlstring @”& lt;(。[^祝辞]*)比;”、“”,RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”([\ r \ n]) (\ s) +”,“”, RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”——比;”、“”,RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @ & lt; !——”。*”、“”,RegexOptions.IgnoreCase);      Htmlstring=正则表达式。替换(Htmlstring @”, (“| # 34);”、“\”“RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”, (amp | # 38);”、“和”,RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”, (lt | # 60);”、“& lt;”,RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”, (gt | # 62);”、“比;”,RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”,(|盼# 160);”、“”,RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”, (iexcl | # 161);”、“\”最后,RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”,(分| # 162);”、“\ xa2”, RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”,(磅| # 163);”、“\ xa3”, RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”,(复制| # 169);”、“\ xa9”, RegexOptions.IgnoreCase);   Htmlstring=正则表达式。替换(Htmlstring @”, # (\ d +);”、“”,RegexOptions.IgnoreCase);

c#程序员应该养成的程序性能优化写法