ORM核心原理解析之 延遲載入

2022-02-18 11:28:05 字數 2005 閱讀 2251

延遲載入(lazy  load)也成為懶載入,基本用於orm中資料物件的一種預設載入方式,簡單點講延遲載入機制是為了避免無所謂的效能開銷而提出來的,所謂延遲載入就是當真正需要資料的時候,才真正的執行資料載入操作。可以簡單的理解為,只有使用的時候,才會例項化物件。

最大的有點就是能夠大大的提高系統的效能。

通過乙個案例來講解,舉乙個很大眾的應用場景,在大多的b2c應用中會設計到到使用者開店的情況,這樣我們就設計乙個會員表,乙個店鋪表,當然乙個會員可以開很多歌店鋪,也就是說這裡面一對多的對映。

看一下類圖:

兩個實體類,聚合關係,下面看一下第一種**結構: 

using system;

using system.collections.generic;

namespace lazyloadshop

console.read();}}

public

class users

public

string username

public

string passwrod

public listmyshops

public users(string _name, string _passwrod)}}

public

class shop

public

int shopid

public

int userid

public

string shopname

public

string shopurl

}}

看一下執行結果:

這種結構應對一般的需求是沒問題的,看一下上面的**,可以看到,店鋪(shop)類是在使用者(user)的建構函式中實現的例項化,也就是說我們在例項化使用者(user)的時候,我們的店鋪(shop)類同樣被例項化,當然,在這種應用場景下是沒問題,但是假如應用場景變化了呢,乙個使用者對應n個店鋪,也就是說,在我操作user的時候同樣也在攜帶者店鋪(shop)這個類,顯然這種方式會對效能有所損耗,尤其當我們只需要使用者(user)不需要店鋪(shop)的時候,這簡直就是一種記憶體浪費,我們想要達到的效果是:我們需要什麼物件你給我例項化什麼

根據這個需求,我們更改一下**結構,我們只需要更改下使用者類(user),第二版:

public

class users

public

string username

public

string passwrod

private listmyshops;

public listmyshops;}

}public users(string _name, string _passwrod)

}

我們在user類中公開了list通過判斷是否為空,而延遲例項化到店鋪類(shop)中,執行結果通第一版,其實延遲載入在orm中很多成熟的框架已經採用這種思路,當然在.net中不能落伍的,在.net 4.0中微軟已經為我們提供了專門用於延遲載入的類庫lazy<>類,我們看一下通過該類我們怎樣實現店鋪(shop)類的延遲載入。

同樣我們還是只需要更改使用者類(user),第三版**:

public

class users

public

string username

public

string passwrod

private

readonly lazy> myshops;

public listmyshops

}public users(string _name, string _passwrod)

}

執行結果同上,這裡需要注意點就是雖然我們在user中建構函式實現了lazy>類的例項,但是list是未被例項化的,我們需要在lazy的建構函式中指定他的**函式。

還需注意的是上面的更改我們應用到了單例模式來實現list是唯一的。

看以看出,lazy的引入使我們大大的簡便了我們延遲初始化。

上傳下原始碼

Windows核心原理與實現之核心載入

在intel x86系統上,windows作業系統獲得控制首先從硬碟的主引導記錄 mbr 開始,windows setup程式在安裝windows時填充mbr 其他的磁碟管理器也可能填充mbr mbr包含 和資料,其 稱為引導 在系統引導時首先獲得控制 mbr中的資料時一張分割槽表,制定了每個分割槽...

kafka原理解析之 訊息可靠性保障

本文討論的是假設存在完美無缺的producer和consumer,從broker角度保障資料可靠的機制。當isr集合發生增減 或者isr集合中任一副本leo發生變化時,都會影響整個分割槽的hw。如上圖所示 leader的leo為9,follower的leo為7,而follower2的leo為6,若判...

分布式技術架構原理解析之協調與同步(五)分布式鎖

前面的文章詳細介紹了 分布式互斥 解釋了同一臨界資源 共享資源 同一時刻只能被乙個程式訪問的問題,也就是說只有獲得訪問許可權的程序才可以訪問共享資源,而此時其他程序必須等待擁有該許可權的程序釋放許可權。那麼在訪問共享資源時,這個許可權是如何設定或產生的呢?以及設定或產生這個許可權的工作原理是什麼?本...