延遲初始化 (Lazy Initialization),在解決大對象的建立開銷時,很有用。我(尋自己)以前碰到 延遲初始化 (Lazy Initialization) 的時候,一直都是理解的不是太透徹,今天決定徹底的認識下 延遲初始化 (Lazy Initialization)。
1.定義
一個對象的延遲初始化 (Lazy Initialization)意味著該對象的建立將會延遲至第一次使用該對象時。延遲初始化 (Lazy Initialization)主要用於提高效能,避免浪費計算,並減少程式記憶體要求。(延遲初始化=延遲執行個體化)
2.理解
在 .Net 4.0 中,可以通過 Laze<Object> 來快速的構建,但是,很不幸,沒有裝 .Net Framework 4.0,況且,這樣的方法,不利於我們理解其中的原理,下面一段經典的代碼,最能說明延遲初始化 (Lazy Initialization):
public sealed class Singleton{ Singleton() { } public static Singleton Instance { get { return Nested.instance; } } class Nested { static Nested() { } internal static readonly Singleton instance = new Singleton(); }}
3.應用情境
以下是最常見的方案:有一個對象的建立開銷很大,而程式可能不會使用它。例如,假定您在記憶體中有一個Customer 對象,該對象的 Orders 屬性包含一個很大的 Order 對象數組,該數組需要資料庫連接以進行初始化。如果使用者從未要求顯示 Orders 或在計算中使用其資料,則沒有理由使用系統記憶體或計算周期來建立它。通過使用 Lazy<Orders> 將 Orders 對象聲明為延遲初始化 (Lazy Initialization),可以避免在不使用該對象的情況下浪費系統資源。有一個對象的建立開銷很大,您想要將建立它的時間延遲到完成其他開銷大的操作之後。例如,假定您的程式在啟動時載入若干個對象執行個體,但只有一些對象執行個體需要立即執行。通過將不必要的對象的初始化延遲到已建立必要的對象之後,可以提高程式的啟動效能。
總結:消極式載入的優勢和實現,相信大家都比較理解了,最重要的是,該實現,也拓寬了我們的視野和思路
尋自己 - 2010/10/12 17:35 - .Net,C#,Asp.Net - 首發部落格園