不可不知的C 基礎 4 延遲載入 提高效能

2022-05-06 10:48:15 字數 1223 閱讀 6925

延遲載入(lazy loading) 設計模式是為了避免一些無謂的效能開銷而提出來的,所謂延遲載入就是當在真正需要資料(讀取屬性值)的時候,才真正執行資料載入操作.

有效使用它可以大大提高系統效能.

為了便於理解, 我們來建立乙個場景, 假設我們要構造乙個hero(英雄) 類, 每個hero 有自己的名字和(specialskill)特殊技能.

這是一種建立的方法:

public class hero

public string name

public specialskill skill

public hero(string name)

}public class specialskill

public string skillname

public int strengthspent

public specialskill(string name)

} class program

}

執行程式後輸出如下, 這個例子非常的容易理解, 結果也是顯然的.

它的缺點是, 當執行hero 建構函式的時候, specialskill 的所有屬性都已經載入了. 如果我們只想獲取這個hero 的fullname, 我們也載入了specialskill 所有值.

在沒有lazy以前我們可以這樣做:

即: 修改屬性specialskill的載入方法. 那麼當我們再執行程式時, 得到的輸出就是:

非常好! 這就是我們要的效果, 這樣可以讓系統更加的有效率.

當net framework 引入了lazy類後, 我們也可以使用它來實現:

lazy提供對延遲初始化的支援。而 lazy中的乙個屬性 value, 則是獲取當前 lazy例項的延遲初始化值。

那麼既然我們已經可以用屬性快取的方法實現, 為什麼還要引入lazy?

至少lazy有以下幾點優勢:

它具有 lazythreadsafetymode, 但是我們一般不使用它, 除非是很關鍵的情況下(在此略去181個字)

它使屬性的定義行更加簡單

從語義上來講, 它更加明確, 更加具有可讀性

它允許null為有效值

不可不知的C 隱藏規則

在物件導向的開發過程中,經常出現類的繼承,這裡面出現的成員函式的過載 overload 覆蓋 override 與隱藏 hidden 很容易混淆。首先澄清這3個概念 過載 相同的範圍 在同乙個類中 函式名字相同 引數不同 virtual 關鍵字可有可無 覆蓋 派生類函式覆蓋基類函式 不同的範圍 分別...

不可不知的健康知識

健康最重要 晚上9 11點為免疫系統 淋巴 排毒時間,此段時間應安靜或聽 晚間11 凌晨1點,肝的排毒,需在熟睡中進行。凌晨1 3點,膽的排毒,亦同。凌晨3 5點,肺的排毒。此即為何咳嗽的人在這段時間咳得最劇烈,因排毒動作已走到肺 不應用止咳藥,以免抑制廢積物的排除。凌晨5 7點,大腸的排毒,應上廁...

不可不知的sudo命令

在linux運維工作中,每個人都應該各司其職。比如說運維經理掌握了root使用者,普通的運維人員一般人手乙個普通登入使用者。root使用者不簡單啊,建立使用者,日常重啟伺服器工作,以及一些其他的日常工作都是root使用者來完成的!很厲害吧!雖然運維經理是乙個super man,但是人家畢竟是經理嘛!...