lazy initialization

ck2265395 13年前發布 | 1K 次閱讀

延遲初始化 (Lazy Initialization),在解決大對象的創建開銷時,很有用。我(尋自己)以前碰到 延遲初始化 (Lazy Initialization) 的時候,一直都是理解的不是太透徹,今天決定徹底的認識下 延遲初始化 (Lazy Initialization)。

 

1.定義

一個對象的延遲初始化 (Lazy Initialization)意味著該對象的創建將會延遲至第一次使用該對象時。延遲初始化 (Lazy Initialization)主要用于提高性能,避免浪費計算,并減少程序內存要求。(延遲初始化=延遲實例化)


2.理解

在 .Net 4.0 中,可以通過 Laze<Object> 來快速的構建,但是,很不幸,沒有裝 .Net Framework 4.0,況且,這樣的方法,不利于我們理解其中的原理,下面一段經典的代碼,最能說明延遲初始化 (Lazy Initialization):

 

01 public sealed class Singleton
02 {
03   Singleton()  { }
04   
05   public static Singleton Instance
06   {
07     get
08     {
09       return Nested.instance;
10     }
11   }
12   
13   class Nested
14   {
15     static Nested() { }
16   
17     internal static readonly Singleton instance = new Singleton();
18   }
19 }

 

3.應用場景

以下是最常見的方案:有一個對象的創建開銷很大,而程序可能不會使用它。例如,假定您在內存中有一個Customer 對象,該對象的 Orders 屬性包含一個很大的 Order 對象數組,該數組需要數據庫連接以進行初始化。如果用戶從未要求顯示 Orders 或在計算中使用其數據,則沒有理由使用系統內存或計算周期來創建它。通過使用 Lazy<Orders> 將 Orders 對象聲明為延遲初始化 (Lazy Initialization),可以避免在不使用該對象的情況下浪費系統資源。有一個對象的創建開銷很大,您想要將創建它的時間延遲到完成其他開銷大的操作之后。例如,假定您的程序在啟動時加載若干個對象實例,但只有一些對象實例需要立即執行。通過將不必要的對象的初始化延遲到已創建必要的對象之后,可以提高程序的啟動性能。

 本文由用戶 ck2265395 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!