C 效能優化之Lazy 實現延遲初始化

2022-01-29 08:21:13 字數 920 閱讀 4873

在.net4.0中,可以使用lazy來實現物件的延遲初始化,從而優化系統的效能。延遲初始化就是將物件的初始化延遲到第一次使用該物件時。延遲初始化是我們在寫程式時經常會遇到的情形,例如建立某一物件時需要花費很大的開銷,而這一物件在系統的執行過程中不一定會用到,這時就可以使用延遲初始化,在第一次使用該物件時再對其進行初始化,如果沒有用到則不需要進行初始化,這樣的話,使用延遲初始化就提高程式的效率,從而使程式占用更少的記憶體。

下面我們來看**,新建乙個控制台程式,首先建立乙個student類,**如下:(由於用的英文版作業系統,所以提示都寫成英文,還請見諒)

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

namespace

public

string name

public

int age }}

然後在program.cs中寫如下**:

using

system;

using

system.collections.generic;

using

system.linq;

using

system.text;

namespace}}

點選f5,執行結果如下:

可以看到,student是在輸出name屬性時才進行初始化的,也就是在第一次使用時才例項化,這樣就可以減少不必要的開銷。

lazy物件初始化預設是執行緒安全的,在多執行緒環境下,第乙個訪問 lazy物件的 value 屬性的執行緒將初始化 lazy物件,以後訪問的執行緒都將使用第一次初始化的資料。

參考:

C 效能優化 延遲初始化Lazy

我們建立某乙個物件需要很大的消耗,而這個物件在執行過程中又不一定用到,為了避免每次執行都建立該物件,這時候延遲初始化 也叫延遲例項化 就出場了。延遲初始化出現於.net 4.0,主要用於提高效能,避免浪費計算,並減少程式記憶體要求。也可以稱為,按需載入。lazyxx new lazy xx代表變數名...

C 之 反射效能優化2

問題回顧 在上篇部落格中,我介紹了優化反射的第乙個步驟 用委託呼叫代替直接反射呼叫。然而,那只是反射優化過程的開始,因為新的問題出現了 如何儲存大量的委託?如果我們將委託儲存在字典集合中,會發現這種設計會浪費較多的執行時間,因為這種設計會引發三個新問題 1.的執行路徑變長了。2.字典查詢是有成本開銷...

c 伺服器開發之效能優化

為什麼要寫這篇文章?聊技術的時候,談到記憶體問題 cpu問題 效率問題的時候,無疑是考量乙個工程師的實戰水平,作為c 開發工程師,沒有自己解決以上問題的專業手段,或許就是缺陷。我之所以寫這個文章,主要是為了記錄 分享我的辦法。我之前寫過記憶體洩漏的一篇文章 其實也是一種手段,如果為你所用,聊技術的時...