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遠程互動時,最昂貴的開銷是在兩台遠程機器之間進行對象傳輸時,所以要在兩機器間的會話頻率和工作階段時數據包的大小之間進行權衡。