减少重复代码 是最基本的 性能优化 方案,尽可能减少那些重复做的事,让他们只做一次,比较常见是这种代码,同样的Math.Cos(angle) 和Math.Sin(angle)都做了2次。
- private Point RotatePt(double angle, Point pt)
- {
- Point pRet = new Point();
- angle = -angle;
- pRet.X = (int)((double)pt.X * Math.Cos(angle) – (double)pt.Y * Math.Sin(angle));
- pRet.Y = (int)((double)pt.X * Math.Sin(angle) + (double)pt.Y * Math.Cos(angle));
- return pRet;
- }
优化后
- private Point RotatePt3(double angle, Point pt)
- {
- Point pRet = new Point();
- angle = -angle;
- double SIN_ANGLE = Math.Sin(angle);
- double COS_ANGLE = Math.Cos(angle);
- pRet.X =(int)(pt.X * COS_ANGLE – pt.Y * SIN_ANGLE);
- pRet.Y = (int)(pt.X * SIN_ANGLE + pt.Y * COS_ANGLE);
- return pRet;
- }
还有另一种 ,在方法中实例化一个对象, 但是这个对象其实是可以复用的。
- public static string ConvertQuot(string html)
- {
- Regex regex = new Regex(“&(quot|#34);”, RegexOptions.IgnoreCase);
- return regex.Replace(html, “\””);
- }
优化后
- readonly static Regex ReplaceQuot = new Regex(“&(quot|#34);”, RegexOptions.IgnoreCase | RegexOptions.Compiled);
- public static string ConvertQuot(string html)
- {
- return ReplaceQuot.Replace(html, “\””);
- }
还有一种是不必要的初始化,比如调用out参数之前,是不需要初始化的。
- public bool Check(int userid)
- {
- var user = new User();
- if(GetUser(userid,out user))
- {
- return user.Level > 1;
- }
- return false;
- }
这里的new User()就是不必要的操作,
优化后
- public bool Check(int userid)
- {
- User user;
- if(GetUser(userid,out user))
- {
- return user.Level > 1;
- }
- return false;
- }