測試ADO.NET團隊進行學習了解
ADO.NET團隊最近討論了ADO.NET Entity框架的各種性能特征。ADO.NET Entity框架在12月已經(jīng)進入它的第三個beta版本,自那時起開發(fā)團隊就開始為開發(fā)人員提供了使用該框架的相關信息。
本文鞭辟入里地介紹了ADO.NET Entity框架的性能,演示了如何提高簡單查詢速度的方法,并闡釋了框架的性能特征。需要重點指出的是,當一個抽象層或者類似EDM(譯注:指Entity Data Model)的模塊被用來轉換數(shù)據(jù)庫的關系樣式時,ADO.NET團隊帶來一定的性能損失。
查詢與結果
本文使用了NorthWind數(shù)據(jù)庫作為模型,并創(chuàng)建了一個簡單查詢:
- (NorthwindEntities ne = NorthwindEntities())
- {
- (Order o ne.Orders)
- {
- i = o.OrderID;
- }
- }
測試時,我們的每個查詢對整個848行數(shù)據(jù)進行了10次遍歷。結果很有意思,第1次運行時耗費了4241毫秒,而接下來的每次運行則平均耗費13毫秒左右的時間。最耗時的一部分內(nèi)容是ObjectContext的創(chuàng)建,ADO.NET團隊而在執(zhí)行任意一個訪問數(shù)據(jù)庫的操作時,都會有一些耗時的操作發(fā)生。#t#
耗時百分比值***的是視圖生成,它達到了驚人的56%。既然視圖生成是造成性能損耗的罪魁禍首,那么開發(fā)人員***是使用命令行工具EDM生成器(EdmGen.exe),運行時需要加上視圖生成命令參數(shù)(/mode:ViewGeneration),ADO.NET團隊的輸出內(nèi)容為一個代碼文件(C#或者VB.NET),可以包含在項目中。視圖的預生成可以將啟動時間降低到2933毫秒,而對于循環(huán)遍歷操作,整個時間可以降低28%。生成視圖并隨著應用程序一起發(fā)布是提高性能的妙方,但其缺點則在于視圖不再是動態(tài)的,一旦模型發(fā)生改變,就需要重新生成以保持同步。