关于代码优化的问题,之前也给大家介绍过相关的内容。下面介绍的是C#代码优化的一些注意事项,供参考。接上一篇>>
二十六、使用IComparable和IComparer接口实现排序关系
1、IComparable接口用于为类型实现最自然的排序关系,重载四个比较操作符,可以提供一个重载版的CompareTo()方法,让其接受具体类型作为参数;
2、IComparer用于提供有别于IComparable的排序关系,或者为我们提供类型本身说没有实现的排序关系。
二十七、避免ICloneable接口
1、对于值类型永远不需要支持ICloneable接口使用默认的赋值操作即可;
2、对于可能需要支持ICloneable接口的基类,应该为其创造一个受保护的复制构造器,并应当避免支持IConeable接口。
二十八、避免强制转换操作符
通过使用构造器来代替转换操作符可以使转换工作变得更清晰,由于在转换后使用的临时对象,容易导致一些诡异的BUG。
二十九、只有当新版积累导致问题是才考虑使用new修饰符
三十、尽可能实现CLS兼容的程序集
1、创建一个兼容的程序集需要遵循两条规则:程序集中所有公有和受保护成员所使用的参数和返回值类型都必须与CLS兼容;任何与CLS不兼容的公有和受保护成员都必须有一个与CLS兼容的替代品;
2、可以通过显式实现接口来避开CLS兼容类型检查,及CLSCompliantAttribute不会检查私有的成员的CLS兼容性。
三十一、尽可能实现短小简洁的方法
1、JIT编译器以方法为单位进行编译,没有被调用的方法不会被JIT编译;
2、如果将较长的Switch中的Case语句的代码替换成一个一个的方法,则JIT编译器所节省的时间将成倍增加;
3、短小精悍的方法并选择较少的局部变量可以获得优化的寄存器使用;
4、方法内的控制分支越少,JIT编译器越容易将变量放入寄存器。
三十二、尽可能实现小尺寸、高内聚的程序集
1、将所有的公有类以及共用的基类放到一些程序集中,把“为公有类提供功能的工具类”也放入同样的程序集中,把相关的公有接口打包到他们自己的程序集中,最后处理遍布应用程序中“水平”位置的类;
2、原则上创建两种组件:一种为小而聚合、具有某项特定功能的程序集,另一种为大而宽、包含共用功能的程序集。
三十三、限制类型的可见性
1、使用接口来暴露类型的功能,可以使我们更方便地创建内部类,同时又不会限制他们在程序集外的可用性;
2、向外暴露的公有类型越少,未来扩展和更改实现所拥有的选择就越多。
三十四、创建大粒度的Web API
这是在机器之间的交易的频率和载荷都降到最低,将大的操作和细粒度的执行放到服务器执行。
三十五、重写优于事件处理器
1、一个事件处理器抛出异常,则事件链上的其他处理器将不会被调用,而重写的虚方法则不会出现这种情况;
2、重写要比关联事件处理器高效得多,事件处理器需要迭代整个请求列表,这样占用了更多的CPU时间;
3、事件能在运行时响应,具有更多的灵活性,可以对同一个事件关联多个响应;
4、通行的规则是处理一个派生类的事件是,重写方式较好。