




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第C#使用Lazy<T>實現(xiàn)對客戶訂單的延遲加載延遲加載是指在需要的時候再加載數(shù)據(jù)。比如獲得一個Customer信息,并不會把該Customer的Orders信息一下加載出來,當(dāng)需要顯示Orders的時候再加載。簡單來說,就是按需加載。使用延遲加載的好處是減少應(yīng)用程序響應(yīng)時間,降低內(nèi)存消耗,避免不必要的數(shù)據(jù)庫交互。
創(chuàng)建Order類和Customer類,Customer中維護(hù)著Order的一個集合,在Customer的構(gòu)造函數(shù)中給Order集合賦值。即,只要創(chuàng)建Customer實例,就會加載該Customer的所有Order。
關(guān)于Customer和Order類。
publicclassCustomer
privateListOrder_orders=null;
publicListOrderOrders
get{return_orders;}
privatestring_customerName;
publicstringCustomerName
get{return_customerName;}
set{CustomerName=value;}
publicCustomer()
_customerName="darren";
_orders=LoadOrders();
privateListOrderLoadOrders()
ListOrderresult=newListOrder
Ordero=newOrder();
o.OrderNumber="001";
result.Add(o);
o=newOrder();
o.OrderNumber="002";
result.Add(o);
returnresult;
publicclassOrder
privatestring_orderNumber;
publicstringOrderNumber
get{return_orderNumber;}
set{_orderNumber=value;}
}
客戶端調(diào)用:
classProgram
staticvoidMain(string[]args)
Customercustomer=newCustomer();
Console.WriteLine(customer.CustomerName);
foreach(varorderincustomer.Orders)
Console.WriteLine(order.OrderNumber);
Console.ReadKey();
}
把斷點(diǎn)打在foreach所在行,為customer變量添加監(jiān)視,就發(fā)現(xiàn):在創(chuàng)建Customer實例的同時,加載了該Customer的所有Order。
LazyT實現(xiàn)延遲加載
對于延遲加載,在這里,需求變成:在創(chuàng)建Customer實例的時候先不要加載該Customer的任何Order,等到遍歷、顯示Orders的時候再加載該Customer的所有的Order。
把Customer的_orders字段設(shè)置為驗證加載。
privateLazyListOrder_orders=null;
Customer的Orders屬性的get訪問器中修改如下。
publicListOrderOrders
get{return_orders.Value;}
}
構(gòu)造函數(shù)中修改如下:
publicCustomer()
_customerName="darren";
_orders=newLazyListOrder(()=LoadOrders());
}
Customer類,修改后,完整如下:
publicclassCustomer
privateLazyListOrder_orders=null;
publicListOrderOrders
get{return_orders.Value;}
privatestring_customerName;
publicstringCustomerName
get{return_customerName;}
set{CustomerName=value;}
publicCustomer()
_customerName="darren";
_orders=newLazyListOrder(()=LoadOrders());
privateListOrderLoadOrders()
ListOrderresult=newListOrder
Ordero=newOrder();
o.OrderNumber="001";
result.Add(o);
o=newOrder();
o.OrderNumber="002";
result.Add(o);
returnresult;
}
還是把斷點(diǎn)打在客戶端foreach代碼行,運(yùn)行。
可見,在沒有遍歷之前,Customer的_orders字段的Value屬性值為null。
F11,進(jìn)入循環(huán)遍歷
可見,當(dāng)進(jìn)入遍歷,獲取Customer實例的Order值的時候,延遲加載開始,_orders字段的屬性值不再為null。
總結(jié):當(dāng)我們希望類的某個屬性實現(xiàn)延遲加載,首先設(shè)計一個LazyT類型的字段,然后在該屬性的get訪問器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遠(yuǎn)程辦公疫情防疫措施與團(tuán)隊協(xié)作
- 2025-2030中國家禽蛋類行業(yè)市場發(fā)展分析及投資發(fā)展戰(zhàn)略前景預(yù)測報告
- 多智能體強(qiáng)化學(xué)習(xí)模型的自動構(gòu)建和可視分析方法研究
- GONE理論視角下上市公司財務(wù)舞弊案例分析-以廣州浪奇為例
- “隱入”與“呈現(xiàn)”-消隱建筑空間設(shè)計研究-以長春雕塑公園魏小明藝術(shù)館擴(kuò)建項目設(shè)計為例
- 2025-2030中國女式牛仔襯衫行業(yè)市場分析及競爭形勢與發(fā)展前景預(yù)測研究報告
- 2025-2030中國太陽能收集器行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 中考作文《握手》不同角度的探討
- 長春市新型城鎮(zhèn)化發(fā)展研究
- 螺紋樁豎向抗拔承載特性研究
- 病歷質(zhì)量培訓(xùn)課件
- 機(jī)房施工安全培訓(xùn)
- 中國卒中學(xué)會急性缺血性卒中再灌注治療指南+2024解讀
- 裝飾報價單完整版本
- 中醫(yī)適宜技術(shù)的試題及答案
- 設(shè)計單位現(xiàn)場施工期間配合及技術(shù)經(jīng)驗服務(wù)措施
- 【MOOC期末】《英美文學(xué)里的生態(tài)》(北京林業(yè)大學(xué))期末中國大學(xué)慕課MOOC答案
- 能源管理系統(tǒng)投標(biāo)技術(shù)文件
- 大學(xué)生個人職業(yè)生涯規(guī)劃課件模板
- 24秋國家開放大學(xué)《企業(yè)信息管理》形考任務(wù)1-4參考答案
- 2024年共青團(tuán)入團(tuán)考試題庫及答案
評論
0/150
提交評論