




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第C#使用Lazy<T>實現對客戶訂單的延遲加載延遲加載是指在需要的時候再加載數據。比如獲得一個Customer信息,并不會把該Customer的Orders信息一下加載出來,當需要顯示Orders的時候再加載。簡單來說,就是按需加載。使用延遲加載的好處是減少應用程序響應時間,降低內存消耗,避免不必要的數據庫交互。
創建Order類和Customer類,Customer中維護著Order的一個集合,在Customer的構造函數中給Order集合賦值。即,只要創建Customer實例,就會加載該Customer的所有Order。
關于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;}
}
客戶端調用:
classProgram
staticvoidMain(string[]args)
Customercustomer=newCustomer();
Console.WriteLine(customer.CustomerName);
foreach(varorderincustomer.Orders)
Console.WriteLine(order.OrderNumber);
Console.ReadKey();
}
把斷點打在foreach所在行,為customer變量添加監視,就發現:在創建Customer實例的同時,加載了該Customer的所有Order。
LazyT實現延遲加載
對于延遲加載,在這里,需求變成:在創建Customer實例的時候先不要加載該Customer的任何Order,等到遍歷、顯示Orders的時候再加載該Customer的所有的Order。
把Customer的_orders字段設置為驗證加載。
privateLazyListOrder_orders=null;
Customer的Orders屬性的get訪問器中修改如下。
publicListOrderOrders
get{return_orders.Value;}
}
構造函數中修改如下:
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;
}
還是把斷點打在客戶端foreach代碼行,運行。
可見,在沒有遍歷之前,Customer的_orders字段的Value屬性值為null。
F11,進入循環遍歷
可見,當進入遍歷,獲取Customer實例的Order值的時候,延遲加載開始,_orders字段的屬性值不再為null。
總結:當我們希望類的某個屬性實現延遲加載,首先設計一個LazyT類型的字段,然后在該屬性的get訪問器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環保項目安全管理機構及職責
- 閱讀的魅力一本好書讀后感(8篇)
- 2025年一級注冊建筑師之建筑經濟、施工與設計業務管理能力提升試卷B卷附答案
- 音頻視頻設備租賃協議
- 基層醫療機構預檢分診工作人員職責概述
- 人力資源招聘進退場交接措施
- 護理模擬求職報告
- 2025年高校科研項目推進計劃
- 2025年盒式便箋項目市場調查研究報告
- 高二語文教學計劃:自主學習能力培養
- DB11∕T2279-2024社會單位消防安全評估規范
- 病歷質量培訓課件
- 機房施工安全培訓
- 中國卒中學會急性缺血性卒中再灌注治療指南+2024解讀
- 裝飾報價單完整版本
- 中醫適宜技術的試題及答案
- 設計單位現場施工期間配合及技術經驗服務措施
- 【MOOC期末】《英美文學里的生態》(北京林業大學)期末中國大學慕課MOOC答案
- 能源管理系統投標技術文件
- 大學生個人職業生涯規劃課件模板
- 24秋國家開放大學《企業信息管理》形考任務1-4參考答案
評論
0/150
提交評論