30.尽可能实现CLS兼容的程序集。
Prefer CLS-Compliant Assemblies。
必须遵从两个规则:1.所有公共的和受保护的成员上的参数和返回值的类型都必须是与CLS兼容的[assembly:CLSCompliant(true)];2.其它不与CLS兼容的公共或者保护成员在其所定义的CLS兼容的对象必须存在同义成员(e.g:重载了operator+后,还要再定义一个同义的Add方法,以便在CLS兼容的程序集中使用Add方法)。
31.尽可能实现短小简洁的函数.
Prefer Small, Simple Functions。
C#编译器只是将C#代码编译成IL程序集,这些程序集必须在执行时经JIT进一步编译成能被CPU处理的本机代码才可以被执行。小函数可以非常容易被JIT编译器分期处理。小函数更有可能被候选内联。当然并不是足够小才行:简单的控制流程也是很重要的,JIT在处理函数内简单的控制分支时,可以更容易地用寄存器存储局部变量。方法越小越有可能被内联,任何虚方法或者含有try/catch块的函数都不可能被内联。
32.尽可能实现小而内聚的程序集.
Prefer Smaller, Cohesive Assemblies.
大程序集需要花更多的CUP时间来加载;分成小程序集可以使得程序启动时的开销被分期处理,但在程序集之间穿梭式,CLR要调整函数入口地址和进行安全验证(同一个程序集中的所有的代码具有相同的可信任级别)。C#/.Net的设计是以组件为核心思想的,我们构建程序集时也应该按照组件的思想来设计程序集的大小。
33.限制类型的可见性。
Limit Visibility of Your Types。
对于每个类型,在满足功能的情况下,应该尽可能的限制其可访问级别。通过在类上实现公共接口来减少可见内容,以暴露必须要暴露的内容。创建内部类(internal class,限制只能在该程序集内部可见)是经常使用的用于限制类型可见范围的方法。
34.创建大粒度的Web APIs。
Create Large-Grain Web APIs。
当你使用web服务,或者.Net远程交互时,最昂贵的开销是在两台远程机器之间进行对象传输时,所以要在两机器间的会话频率和会话时数据包的大小之间进行权衡。