延遲初始化 (Lazy Initialization)

來源:互聯網
上載者:User

延遲初始化 (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 - 首發部落格園

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.