亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Access > 正文

[翻譯]比較ADO.NET中的不同數據訪問技術(Performance Comparison:Data Access Techniques)

2024-09-07 19:05:15
字體:
來源:轉載
供稿:網友
[翻譯]比較ADO.NET中的不同數據訪問技術(Performance Comparison:Data access Techniques) Posted on 2015-01-26 10:50 lsr_flying 閱讀(...) 評論(...) 編輯 收藏Performance Comparison: Data Access Techniques

PRiya DhawanMicrosoft Developer Network

January 2002

原文鏈接:https://msdn.microsoft.com/en-us/library/ms978388.aspx

概要:在典型的應用環境中,比較不同數據訪問技術的表現性能。適用于Microsoft .NET Framework Beta2 和 Microsoft SQL Server 2000.(23頁打印頁)

簡介

  數據訪問方式的架構選擇會對程序的性能、擴展性、可維護性和易用性帶來影響。這篇文章的重點在于論述這些選擇產生的不同性能表現。數據訪問技術包括:Microsoft ADO.NET Command,DataReader,DataSet和xmlReader,這里使用Microsoft SQL ServerTM 2000數據庫比較這些不同技術在一些典型的應用環境下的區別。在這些比較當中,會在一定的用戶負載范圍內對Customer,Order和OrderDetail 數據執行一系列的命令操作。

  展示這些不同數據訪問技術的代碼示例同樣可以使用在討論ADO.NET的數據訪問技術的相關文章當中。這些例子包括了使用ADO.NET訪問單個值,單行,多行和層次數據。

測試場景

  任何數據操作的性能表現取決于以下因素:

  數據訪問中的對象構造和對象填充會帶來很大的系統開銷。比如,使用ADO.NET的DataSet進行實例和填充操作就比使用DataReader或XMLReader進行同樣操作要占用更多的系統開銷。

  數據訪問技術對數據庫造成的負載情況是不一樣的。比如,應用程序讀取數據時,DataSet和DataReader使用的連接方式是不一樣的。使用存儲過程的數據訪問技術就比使用動態SQL表達式的方式要少一些數據庫的工作負荷。關系型數據與XML之間的轉化對服務器資源的使用也與此類似。

  對數據庫的數據往返訪問的數量也是一個因素,特別是在鎖和事務跨越多個數據來回。

  通過網絡傳輸的數據量也是一個關鍵因素,呈現為xml格式的數據比其它格式的數據要大很多。

  我們使用一些在業務應用當中常用的操作,比如獲取一個客戶列,查詢一個客戶的相關訂單或者插入一個訂單,來比較ADO.NET的不同的數據訪問技術。為了使測試更加可靠,數據庫加載了超過100,000行的客戶賬號,一百萬行訂單(每個客戶10個訂單)和超過五百萬行的訂單細節(每個訂單有5個細節)。這些數據存在一個SQL Server 2000數據庫當中,通過SQL Server .NET data provider連接到SQL Server中。在這里比較的一些方法使用了SQL Server 2000的XML特性。

GetOrderStatus

  GetOrderStatus方法接受一個OrderId,然后返回一個表示這個訂單狀態的整型。

GetCustomer

  GetCustomer方法接受一個CustomerId參數,然后返回關于該客戶信息的一行記錄。

GetCustomers

  GetCustomers方法接受一個CustomerId和一個指明你要讀取的行數的參數。在所有CustomerID大于傳給網頁服務方法的CustomerID的行中,將讀取最上面的n行數據,并返回。

  我們在一大堆具有不同頁數的客戶記錄中執行帶分頁的測試。這些客戶記錄的頁數分別為:100,500和1000?!?/p>GetOrders

  GetOrders方法從數據庫獲取一系列層次訂單和它們對應的細節。這個方法接受一個OrderId和一個指明要讀取多少訂單數的參數。在所有OrderId大于傳入的OrderId的記錄當中,最上面的n行記錄將被讀取到。

  我們在一大堆具有不同頁數的客戶記錄中執行帶分頁的測試。這些客戶記錄的頁數分別為:10個訂單(50個細節),50個訂單(250個細節)和100個訂單(500個細節)。

InsertCustomer

  InsertCustomer方法接受一個customer數據,并向數據庫中插入一個customer行,然后將CustomerId作為一個整型返回?! ?/p>InsertCustomers

  InsertCustomers方法接受一系列customer類集合,然后向數據庫中插入多行對應的customer記錄。

InsertOrder

  InsertOrder方法接受的數據,包含了一個帶多個detail數據的order記錄,并把對應的Order和OrderDetails信息插入數據庫當中。測試方法通過插入一個order表頭和不同的details來進行。

測試工具

  基于我們的測試目的,我們使用application Center Test(ACT),它適合用于對Web服務器進行壓力測試,并分析Web程序的性能和擴展性問題。Web程序就包括ASP頁面和它們使用的組件。要了解更多關于創建和運行測試的方法,請參考ACT documentation。使用ACT來測試Web服務器中的不同數據訪問技術是很適合的,因為它提供了很多有用的功能來完成測試。首先,它可以通過打開多個對服務器的連接和快速發送HTTP請求來模擬一大組客戶并發操作。其次,它也允許我們建立真實的測試環境,在其中我們可以使用有一系列隨機參數調用同樣的一個方法。這是一個很重要的功能,因為用戶不應該反復地利用同樣的參數調用同樣的方法。另一個更重要的功能就是,Application Center Test會記錄測試結果,這些測試結果可以提供關于Web程序性能表現的最重要的信息。

  雖然直接測試數據訪問技術,而不是像我們這樣通過Web服務器來測試,會讓我們得到更好的吞吐量和響應時間,但是在一個無狀態的環境下更接近真實的程序應用環境。并且,因為我們基本上是比較這些數據訪問技術的相對性能,在無狀態環境(也就是在Web服務器背后)中,測試的系統開銷在所有情況下都是一樣的。

  我們之前討論的所有數據訪問技術都通過.NET Framework程序集進行實施。使用ACT對程序集產生客戶負載,我們實現wrapper.aspx頁面,所有的客戶請求全部都送到這個界面,然后調用程序集。這些程序集中的方法實施了使用ADO.NET技術的數據操作。他們是一些簡單的子過程,并不會向.aspx 頁面返回數據。當從數據庫獲得數據行后,這些方法在記錄行中進行迭代,然后把列值賦給本地變量。通過在讀取從ADO.NET對象中得到的數據時添加延遲,我們模擬使用這些數據進行一些處理操作時的開銷。

  測試腳本使用Microsoft VBScript進行編寫。根據在test script中執行的具體方法,我們隨機化對不同的Customer或Order的請求。比如:

  Dim URL  Dim UB, LB  ' Set the upperbound for Orders list  UB = 1000000  ' Set the lowerbound for Orders list  LB = 1  ' Set the URL  URL  = "http://myServer/DataAccessPerf/DataReader.aspx"  ' Use the Randomize funtion to initialize the Rnd function  Randomize  Test.SendRequest(URL & "?OrderId=" & int((UB – LB + 1)*Rnd + LB))機器配置

  下面的表格對進行測試的測試臺配置進行了一個概要總結:  

  表1.客戶機配置

# of ClientsMachine/CPU# of CPUsMemoryDiskSoftware
1Dell Precision WorkStation530 MT1694 MHz1512 MB16.9 GB
  • Microsoft Windows® XP
  • Application Center Test

  表2. Web服務器配置

# of ServersMachine/CPU# of CPUsMemoryDiskSoftware
1Compaq Proliant 400 MHz4640 MB50 GB
  • Windows 2000 Advanced Server SP 2
  • .NET Framework Beta 2

  表3. 數據庫服務器配置

# of ServersMachine/CPU# of CPUsMemoryDiskSoftware
1American Megatrends Atlantis800 MHz21 GB28 GB
  • Windows 2000 Advance Server SP 2
  • SQL Server Enterprise Edition SP 2Throughput and latency are the key performance indicators. For a given amount of data being returned, throughput is the number of client requests processed within a certain unit of time, typically within a second. Because peak throughput may occur at a response time that is unacceptable from a usability standpoint, we tracked latency, measured as response time using the report generated by Application Center Test for each of the test run, and capped the testing of a given method once the response time exceeded 1 second.

性能測試結果

GetOrderStatus

  這里我們比較使用不同的數據訪問技術從數據庫獲取單個值的表現。

ms978388.bdadotnetarch031_01(en-us,MSDN.10).gif

圖1. GetOrderStatus: 吞吐量和延遲

注解

  • 所有的訪問都使用存儲過程。
  • 在ExecuteScalar方式中,單個值使用command對象的ExecuteScalar方法返回。
  • 在Output參數方式中,單個值作為command對象的一個output參數返回。
  • 在DataReader方式中,DataReader用來獲取單個值。
  • 在XmlReader方式中,指明了一個帶有FOR XML子句的SQL查詢來獲得單個值,這個值在XmlReader中以XML的形式保存。

  如圖1所示,ExecuteScalar,Output Parameter和DataReader方法獲取單個值得性能表現在所有用戶負載范圍內都很接近。

  但ExecuteScalar方法比其它方法需要更少的代碼,因此,從代碼維護性的角度來說,是最好的選擇。

  XMLReader方法與其它方法相比,會產生更低的尖峰吞吐量,并且包含了FOR XML查詢的存儲過程會比其它方法使用的存儲過程花費更多的時間。

GetCustomer

  這里我們比較從數據庫獲取單行記錄時不同數據訪問技術的表現差異。

ms978388.bdadotnetarch031_02(en-us,MSDN.10).gif

圖2. GetCustomer: 吞吐量和延時

注解:

  • 所有方法采用存儲過程。
  • 在Output參數方法中,單個行記錄通過command object的output參數集來返回。
  • 在DataReader方法中,DataReader被用來獲取單行記錄。
  • XmlReader方法使用一個帶FOR XML子句的SQL查詢來從數據庫中獲取一個行記錄,這條行記錄存儲以XML文件的形式存儲在XmlReader中。
  • DataSet方法把單行記錄填充到DataSet中。

  如圖2所示,Output參數和DataReader的方法在不同用戶負載范圍內表現一致,并且產生比較好的網絡吞吐量,均比另外兩種方法好。XmlReader方法在吞吐量和響應時間方面表現稍微比DataSet好一些。

  在XmlReader方法中,使用FOR XML的SQL查詢比其它方法要花更長的執行時間。

  在這中情況下,DataSet對象的創建引起的系統開銷是導致了比較低的吞吐量的主要原因。

GetCustomers

在這個部分,我們比較讀取多行記錄時(各數據訪問技術的)性能表現。我們分別進行返回結果集有100行,500行,1000行記錄的測試,以觀察數據返回量對性能的影響。

ms978388.bdadotnetarch031_03(en-us,MSDN.10).gif

圖 3. GetCustomers (Customers=100): 吞吐量和延時

注解:

  • 所有方法采用存儲過程。
  • 在DataReader方法中,DataReader被用來獲取多行記錄。
  • XmlReader方法使用一個帶FOR XML子句的SQL查詢來從數據庫中獲取行記錄,這些行記錄存儲以XML文件的形式存儲在XmlReader中。
  • DataSet方法把行記錄填充到DataSet中。

  正如你所預料的,從數據庫讀取更多地行記錄會降低每秒的請求數,因為需要處理更多的行記錄,并發送這些行記錄。

  圖3顯示了DataReader方法的吞吐量幾乎比另外兩種方法大兩倍。DataSet和XmlReader方法的性能表現幾乎一樣,不過,在吞吐量方面,XmlReader比DataSet方法稍微好一點點。

ms978388.bdadotnetarch031_04(en-us,MSDN.10).gif

圖4. GetCustomers (Customers=500): 吞吐量和延時

<
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲护士老师的毛茸茸最新章节| 不卡在线观看电视剧完整版| 久久这里只有精品99| 日韩在线观看成人| 久久噜噜噜精品国产亚洲综合| 亚洲国产日韩一区| 欧美黑人狂野猛交老妇| 91精品国产综合久久香蕉最新版| 成人精品一区二区三区| 欧美日本精品在线| 中文字幕亚洲无线码a| 亚洲精美色品网站| 日本一本a高清免费不卡| 中文欧美在线视频| 亚洲第一免费播放区| 国产精品久久久久不卡| 国产精品麻豆va在线播放| 成人h片在线播放免费网站| 中文字幕亚洲一区在线观看| 亚洲性夜色噜噜噜7777| 国产91色在线|免| 亚洲欧美综合v| 国产成人在线亚洲欧美| 欧美洲成人男女午夜视频| 亚洲男人天堂九九视频| 亚洲男人天堂手机在线| 麻豆精品精华液| 国产成人精品一区二区三区| 97色在线观看免费视频| 国内精品久久久久久久久| 欧美精品videos另类日本| 国产精品久久综合av爱欲tv| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲精品国产拍免费91在线| 亚洲欧洲国产伦综合| 欧美黄网免费在线观看| 精品二区三区线观看| 日韩一区二区久久久| 91精品国产综合久久香蕉| 在线中文字幕日韩| www.日韩.com| 一区二区三区四区精品| 日本免费一区二区三区视频观看| 国产精品影片在线观看| 欧美在线xxx| 亚洲欧洲国产伦综合| 久久久久久久激情视频| 久久久久久久久久久久av| 操91在线视频| 精品一区二区三区电影| 91成品人片a无限观看| 91欧美视频网站| 亚洲一区www| 欧美久久久精品| 欧美性极品xxxx娇小| 国产裸体写真av一区二区| 色综合伊人色综合网站| 欧美激情xxxxx| 亚洲福利视频网| 色综合天天狠天天透天天伊人| 亚洲国产精品成人va在线观看| 国内自拍欧美激情| 国产国语videosex另类| 亚洲精选一区二区| 国产成人精品一区二区| 欧美伊久线香蕉线新在线| 精品国产鲁一鲁一区二区张丽| 91精品久久久久| 日韩女优人人人人射在线视频| 欧美尺度大的性做爰视频| 亚洲三级 欧美三级| 92福利视频午夜1000合集在线观看| 国产91热爆ts人妖在线| 欧美野外猛男的大粗鳮| 最新91在线视频| 欧美精品在线观看| 欧美激情免费在线| 国模私拍视频一区| 亚洲字幕在线观看| 亚洲iv一区二区三区| 久久精品亚洲一区| 欧美激情在线视频二区| 国产精品观看在线亚洲人成网| 在线精品91av| 国产精品极品尤物在线观看| 国产美女精品视频免费观看| 亚洲欧美综合精品久久成人| 精品国偷自产在线| 日韩日本欧美亚洲| 欧美中文字幕第一页| 热久久美女精品天天吊色| 国产97色在线| 国产精品国内视频| 国产91精品在线播放| 欧美日韩一区二区在线| 国产在线拍偷自揄拍精品| 岛国av在线不卡| 成人免费淫片视频软件| 欧美激情一级精品国产| 久久97久久97精品免视看| 欧美在线精品免播放器视频| 91久久夜色精品国产网站| 色天天综合狠狠色| 2019中文在线观看| 色综合影院在线| 高清日韩电视剧大全免费播放在线观看| 欧美有码在线观看视频| 欧美性生交xxxxx久久久| 91精品国产91久久久| 国产suv精品一区二区| 国产欧美va欧美va香蕉在线| 国产婷婷色综合av蜜臀av| 国产成一区二区| 成人久久18免费网站图片| 亚洲国产成人精品女人久久久| 色婷婷久久av| 91日韩在线视频| 欧美高清无遮挡| 成人网中文字幕| 最近更新的2019中文字幕| 亚洲女成人图区| 国产成人精品视| 亚洲qvod图片区电影| 日韩成人久久久| 亚洲自拍在线观看| 欧美黄色片免费观看| 久久91亚洲精品中文字幕奶水| 久久久久国产视频| 91豆花精品一区| 97热在线精品视频在线观看| 精品激情国产视频| 久久亚洲私人国产精品va| 亚洲人成网站999久久久综合| 九九久久久久久久久激情| 国产精品流白浆视频| 国产精品视频一区国模私拍| 欧美日韩性生活视频| 国产美女精品视频| 中文字幕亚洲自拍| 国产欧洲精品视频| 97精品国产97久久久久久春色| 亚洲成年人影院在线| 成人av在线亚洲| 欧美激情视频三区| 欧美激情久久久久| 欧美日韩中文字幕日韩欧美| 92版电视剧仙鹤神针在线观看| 国产精品一区二区久久久| 亚洲国产一区二区三区在线观看| 国产精品久久久久久久天堂| 国产精品99久久久久久白浆小说| 日本在线精品视频| 亚洲久久久久久久久久| 国产一区二区在线免费| 91在线直播亚洲| 午夜精品99久久免费| 国产丝袜精品第一页| 成人免费在线视频网站| 蜜月aⅴ免费一区二区三区| 欧美日本高清视频| 九九热在线精品视频| 91精品视频专区| 伊人激情综合网| 国产视频精品va久久久久久|