讀書筆記(備忘)-.NET性能優化

 好的軟件產品:業務流程、用戶體驗、安全性和非常重要的性能。
1、非託管資源的清理推薦Dispose模式來代替Finalize方式。
2、選擇正確的垃圾收集器:工作站GC和服務器GC。
3、在適當的情況下對對象實現弱引用。保證在胖對象在內存不足時GC可以回收。
 MyClass mc = new MyClass();
 //創建弱引用
 WeakReference wr = new  WeakReference(mc);
 //移除強引用
 mc = null;
4、儘可能以using來執行資源清理。
5、推薦使用泛型集合來代替非泛型集合。大量的裝箱、拆箱操作會帶來頻繁的垃圾回收、安全檢查都不同程度的影響着性能,這些弊端再泛型集合中蕩然無存。
6、特定類型的Array性能優於ArrayList。後者添加值類型的時候會有裝、拆箱操作,但它更容易操作和使用,選擇存在權衡比較。
7、初始化時最好爲集合對象指定大小。
8、字符串駐留機制,是CLR爲String類型實現的特殊設計。
9、合理使用System.String和System.Text.StringBuilder。優先使用String,而在大量字符串連接操作的情況下優先考慮StringBuilder。
10、儘量在子類中重寫ToString方法。有效控制輸出結果並在一定程度上減少裝箱操作的發生。
11、字符串比較通常做法是str1==str2,較好的實現爲String.Compare(str1,str2);返回-1 或 0
12、for和foreach的選擇。推薦選擇foreach來處理可枚舉集合的循環結構。
13、用多線程來處理多任務。
14、儘量減少拋出異常,禁止將異常處理放在循環內,應儘量使用邏輯流程控制來代替異常處理。
15、捕獲異常時,catch塊儘量指定具體的異常篩選器,多個catch塊應該保證異常由特殊到一般的排列順序。
16、struct和Class的性能比較,在特殊情況下以struct來實現對輕量數據的封裝是較好的選擇,struct是值類型分配在線程的堆棧上,有較好的性能表現。當然,絕大部分情況下,class都具有不可代替的地位。
17、以is/as模式進行類型兼容性檢查。
18、使用const和static readonly的權衡。 在實際應用中推薦使用static readonly來代替const,以解決const可能引起的程序集引用不一致問題,還有帶來較多的靈活性控制。
19、儘量避免不當的裝箱、拆箱,選擇合適的代替方案。
20、儘量使用一維零基數組。
21、用以FxCop工具,檢查你的代碼。可以幫助我們檢查分析現存託管程序在設計、本地化、命名規範、性能和安全性幾個方面是否規範。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章