今天,我想跟大家聊一聊C#的性能優化,當然,這里並不談基本的原則,這些都假設你已經非常精通了,本文聊的是要爭取幾個毫秒的程序。關於基本的性能優化,可以參考園子里的文章。比如: .NET 性能優化方法總結 先說說我的測試環境: 一台典型的筆記本電腦,Windows 7中文版,.net ...
接上篇繼續,本文的完整源代碼也在上篇文章中。 枚舉數組和普通枚舉性能差異 有些人可能知道,.net在處理枚舉時,對於數組有特別的優化,所以,當枚舉的集合是一個數組時,性能會好些。例如下面的測試代碼: 第 行的方法中,編譯器提前已知是一個數組的枚舉,所以會優化指令。那么,到底這種優化差距有多大呢 我需要試驗一下。 第一個是Do 的結果,第二個是Do 的結果,顯而易見,差距還是相當大的,為什么呢 從反 ...
2012-05-14 09:31 8 5510 推薦指數:
今天,我想跟大家聊一聊C#的性能優化,當然,這里並不談基本的原則,這些都假設你已經非常精通了,本文聊的是要爭取幾個毫秒的程序。關於基本的性能優化,可以參考園子里的文章。比如: .NET 性能優化方法總結 先說說我的測試環境: 一台典型的筆記本電腦,Windows 7中文版,.net ...
1. C#語言方面 1.1 垃圾回收 垃圾回收解放了手工管理對象的工作,提高了程序的健壯性,但副作用就是程序代碼可能對於對象創建變得隨意。 1.1.1 避免不必要的對象創建 由於垃圾回收的代價較高,所以C#程序開發要遵循的一個基本原則就是避免不必要的對象創建。以下列舉一些常見的情形 ...
給EPList創建索引,並添加數據 通過索引高效查詢數據 ...
反射是一種很重要的技術,然而它與直接調用相比性能要慢很多,因此如何優化反射性能也就成為一個不得不面對的問題。 目前最常見的優化反射性能的方法就是采用委托:用委托的方式調用需要反射調用的方法(或者屬性、字段)。 目前最常見也就是二種方法:Emit, ExpressionTree ...
問題回顧 在上篇博客中,我介紹了優化反射的第一個步驟:用委托調用代替直接反射調用。 然而,那只是反射優化過程的開始,因為新的問題出現了:如何保存大量的委托? 如果我們將委托保存在字典集合中,會發現這種設計會浪費較多的執行時間,因為這種設計會引發三個新問題: 1. 代碼的執行 ...
1. C#語言方面 1.1 垃圾回收 垃圾回收解放了手工管理對象的工作,提高了程序的健壯性,但副作用就是程序代碼可能對於對象創建變得隨意。 1.1.1 避免不必要的對象創建 由於垃圾回收的代價較高,所以C#程序開發要遵循的一個基本原則就是避免不必要的對象創建。以下列舉一些常見的情形 ...
性能主要指兩個方面:內存消耗和執行速度。性能優化簡而言之,就是在不影響系統運行正確性的前提下,使之運行地更快,完成特定功能所需的時間更短。 本文以.NET平台下的控件產品MultiRow為例,描述C#性能優化的實踐。 性能優化原則 · 理解需求 MultiRow的一個性能需求是:“百萬 ...
CodeDOM優化的誤區 反射優化的總結 在前二篇博客中,我分別介紹了二種優化反射的方法 ...