C 效能優化 延遲初始化Lazy

2022-07-30 03:42:15 字數 1935 閱讀 1797

我們建立某乙個物件需要很大的消耗,而這個物件在執行過程中又不一定用到,為了避免每次執行都建立該物件,這時候延遲初始化(也叫延遲例項化)就出場了。

延遲初始化出現於.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;

using 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();}}

}

設定斷點除錯後發現,在new完之後,student的isvaluecreated的值是false,value的值是null

接著往下走,呼叫到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種方式是我認為最合適的,也是我在專案中實際使用的優化方法。這種方式非常簡單,例如 非同步元件在官方...