曾经在网上听过这样一句话
我非常赞同这句话,所以对于那些极度影响阅读的性能优化我就不在这里赘述了
<强>今天主要说的就是一些举手之劳即可完成的性能优化强>
<>强减少重复代码强>
这是最基本的优化方案,尽可能减少那些重复做的事,让他们只做一次
比较常见是这种代码,同样的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;
结果为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#程序员应该养成的程序性能优化写法