我們建立某乙個物件需要很大的消耗,而這個物件在執行過程中又不一定用到,為了避免每次執行都建立該物件,這時候延遲初始化(也叫延遲例項化)就出場了。
延遲初始化出現於.net 4.0,主要用於提高效能,避免浪費計算,並減少程式記憶體要求。也可以稱為,按需載入。
lazyxx = new lazy();//xx代表變數名首先建立乙個student類,**如下:
using system;建立乙個控制台程式,**如下:using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace lazytest
public string name }}
using system;設定斷點除錯後發現,在new完之後,student的isvaluecreated的值是false,value的值是nullusing system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace lazytest
console.writeline(student.value.name);
if (student.isvaluecreated)
console.readkey();}}
}
接著往下走,呼叫到name屬性時,student的isvaluecreated的值是true,value的值已經不為null了
執行結果:
結果可以看出,student是在輸出name屬性才進行初始化的,也就是在第一次使用時才會去初始化,這樣就可以達到減少消耗的目的。
這個例子很簡單,也是lazy最基本的使用方式。我們還可以使用 lazy的過載函式 lazy(func) 傳入乙個帶返回值的委託來設定延遲初始化物件的屬性值。
using system;執行結果:using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
namespace lazytest
); if (!student.isvaluecreated)
console.writeline(student.value.name);
if (student.isvaluecreated)
console.readkey();}}
}
注:lazy物件初始化預設是執行緒安全的,在多執行緒環境下,第乙個訪問 lazy物件的 value 屬性的執行緒將初始化 lazy物件,以後訪問的執行緒都將使用第一次初始化的資料。
有乙個物件的建立開銷很大,而程式可能不會使用它。例如,假定您的程式在啟動時載入若干個物件例項,但只有一些物件例項需要立即執行。通過將不必要的物件的初始化延遲到已建立必要的物件之後,可以提高程式的啟動效能。
C 效能優化之Lazy 實現延遲初始化
在.net4.0中,可以使用lazy來實現物件的延遲初始化,從而優化系統的效能。延遲初始化就是將物件的初始化延遲到第一次使用該物件時。延遲初始化是我們在寫程式時經常會遇到的情形,例如建立某一物件時需要花費很大的開銷,而這一物件在系統的執行過程中不一定會用到,這時就可以使用延遲初始化,在第一次使用該物...
延遲初始化 beans
在預設情況下,而不是幾個小時甚至幾天後才發現這些錯誤。當這些行為不適合我們的時候,我們可以通過定義bean為延遲初始化阻止 singleton bean 的 pre instantiated 乙個延遲載入的bean會告訴ioc容器,第一次使用它的時候建立bean,而不是在啟動的時候建立。在xml檔案...
Vue 初始化效能優化
原文 這個結果顯然不是我們要的,更好的結果是頁面可以從上到下按順序流式渲染,這樣可能總體時間增長了,但首屏時間縮減,在使用者看來,頁面開啟速度就更快了。要實現這種渲染模式,我總結了下有3種方式實現。第3種方式是我認為最合適的,也是我在專案中實際使用的優化方法。這種方式非常簡單,例如 非同步元件在官方...