ADO.NET性能的優(yōu)化
- 期刊名字:現(xiàn)代計(jì)算機(jī)(專業(yè)版)
- 文件大?。?04kb
- 論文作者:劉萬授
- 作者單位:華南師范大學(xué)計(jì)算機(jī)系
- 更新時間:2020-09-30
- 下載次數(shù):次
應(yīng)用技術(shù)ADO.NET性能的優(yōu)化劉萬授.(華南師范大學(xué)計(jì)算機(jī)系,廣州510631 )摘要:本文主要分析了ADO.NET中兩種典型的數(shù)據(jù)訪問模式的性能,以及有肋于提高數(shù)據(jù)訪問性能的存儲結(jié)構(gòu)和連接池技術(shù)并進(jìn)一步研究了ADO.NET中其他優(yōu)化數(shù)據(jù)訪問性能的方法。關(guān)鍵詞:ADO .N ET ;DataSet ;DataReader ;存儲過程;連接池1概述它以只讀的方式遍歷結(jié)果集。由于不需要以隨機(jī)ADO.NET是.NET中的一個核心技術(shù)是一個的方式訪問結(jié)果集,因此,就不會增大額外的系統(tǒng).功能強(qiáng)大的數(shù)據(jù)訪問類庫。然而ADO.NET并不是開銷,當(dāng)執(zhí)行純粹的讀操作,DataReader能提供高ADO的升級版本,它是全新的面向?qū)ο竽P团c效的數(shù)據(jù)訪問性能;當(dāng)執(zhí)行一個搜索并返回多個結(jié)果集時,DataReader更能大大提高性能。每-個時ADO相比,它具有平臺無關(guān)性、可伸縮性和高性能刻只有-行記錄緩存在內(nèi)存中,因而內(nèi)存開銷也特的數(shù)據(jù)訪問等優(yōu)點(diǎn),比ADO更適應(yīng)于分布式及別少。由于連接模式是提供快速、只向前、只讀的Internet等大型應(yīng)用程序環(huán)境。ADO.NET允許以多來自數(shù)據(jù)庫的數(shù)據(jù)流,因此在-些方面采用該模式種有用方式來訪問數(shù)據(jù)如對數(shù)據(jù)直接訪問的連接并不適當(dāng),當(dāng)應(yīng)用程序需要以下功能時可使用模式DataReader也可通過緩存數(shù)據(jù)結(jié)果集的離線DataReader來提高數(shù)據(jù)訪問的速度:存取的斷開模式DataSet ,DataSet 可以說是專門為①不需要緩存數(shù)據(jù);.NET平臺設(shè)計(jì)的數(shù)據(jù)存取結(jié)構(gòu)。ADO.NET同時也②正在處理的結(jié)果集太大而不能全部放入內(nèi)為開發(fā)人員提供了豐富的數(shù)據(jù)訪問對象,比如用于存中;連接的Connection對象,用于對數(shù)據(jù)庫進(jìn)行操作的③需要迅速一次性訪問數(shù)據(jù)采用只向前的只命令Command對象以及為斷開模式提供粘合劑的讀方式。數(shù)據(jù)適配器DataAdapter對象等等。怎樣充分地利默認(rèn)情況下,DataReader對象在Read方法中用這些數(shù)據(jù)訪問模式以及相關(guān)的訪問對象來開發(fā)把整個行載入內(nèi)存中這允許你隨機(jī)訪問當(dāng)前行的高性能數(shù)據(jù)訪問程序?這就是本文所要研究的問任意列。如果隨機(jī)訪問列是不必要的,可以通過把題。本文從對ADO.NET的訪問模式的剖析入手Command Behavior Sequential Access傳遞給Execute深入分析各種訪問模式的性能并且對不同的能提;Reader調(diào)用來提高性能。這改變了DataReader的現(xiàn)高數(shù)據(jù)訪問性能的技術(shù)和方法做-全面的分析。默認(rèn)行為,只在需要時才把數(shù)據(jù)載入內(nèi)存并且要代2兩大數(shù)據(jù)訪問模式求按次序訪問返回的行中的列值,因此可以進(jìn)一步計(jì)節(jié)省內(nèi)存開銷提高訪問的速度。對讀取大量的二算(1漣接訪問模式(DataReader)進(jìn)制數(shù)據(jù)時這樣更可以大大提高訪問速度。機(jī)連接訪問模式就是用戶同數(shù)據(jù)庫交互時需要當(dāng)要結(jié)束從DataReader中讀取數(shù)據(jù),但是仍連接-個數(shù)據(jù)庫實(shí)例,向數(shù)據(jù)庫執(zhí)行命令再關(guān)閉然有大量的未讀取的結(jié)果等待,那么可以調(diào)用連接。連接模式是通過DataReader對象來實(shí)現(xiàn)的,Command的Cancel取代DataReader的Close 來提第為了得到一個DataReader對象,必須在已經(jīng)建立高性能。中國煤化工: Close引起它檢索連接的基礎(chǔ)上執(zhí)行Command.ExecuteReader方法。未讀取YHCNMH流后關(guān)閉游標(biāo)。調(diào)DataReader是連接的、只向前讀的、游標(biāo)樣式的類用Command的Cancel刪除服務(wù)器上的結(jié)果,因此第0 MODERN COMPUTER 2010 .應(yīng)用技術(shù)當(dāng)DataReader關(guān)閉時,它不需要再讀取結(jié)果,因而貴,因?yàn)檫B接要使用寶貴的系統(tǒng)資源,例如內(nèi)存和能提高性能。DataReader對象提供了快速的數(shù)據(jù)訪網(wǎng)絡(luò)帶寬。而連接池可以減少連接所消耗的時間問,但卻不具備靈活訪問數(shù)據(jù)的功能,如果程序要和系統(tǒng)資源。連接池允許我們通過-個緩沖池重求對數(shù)據(jù)進(jìn)行大量的操作或者要求能隨機(jī)訪問數(shù)用現(xiàn)有的連接對象避免每次使用連接對象時都要據(jù),,可以采用下面討論的斷開訪問模式。新建一個對象。采用連接池之后,只要少量的連接( 2 )斷開訪問模式( DataSet )對象就可以滿足大量客戶端的需要。DataSet 完全是一個非連接的、與數(shù)據(jù)源無關(guān)每一個連接池都與一個獨(dú)立的連接字符串及的類。非連接性表現(xiàn)為,當(dāng)數(shù)據(jù)適配器把所需要的其事務(wù)上下文關(guān)聯(lián)。每次打開一個新的連接數(shù)據(jù)數(shù)據(jù)載入DataSet后就可以斷開數(shù)據(jù)源而允許對提供者會嘗試將指定的連接字符串與連接池的字?jǐn)?shù)據(jù)進(jìn)行操作。DataSet 總是在脫機(jī)模式下對數(shù)據(jù)符串進(jìn)行匹配。如果匹配失敗數(shù)據(jù)提供者創(chuàng)建-進(jìn)行操作。本質(zhì)上,DataSet是內(nèi)存中的高速緩存;個新的連接并將它加入連接池。連接池被創(chuàng)建之區(qū)用于高速緩存關(guān)系型的數(shù)據(jù)。而數(shù)據(jù)源無關(guān)性后除非進(jìn)程結(jié)束,否則不會被拆除并且維護(hù)一個主要表現(xiàn)在,不論DataSet中包含的數(shù)據(jù)是來自不活動的或者空的連接池不需要多少開銷。連接.XML文檔、關(guān)系型數(shù)據(jù)庫還是通過用戶接口以編程池創(chuàng)建之后系統(tǒng)會創(chuàng)建一些連接對象并將它們加的方式輸入的數(shù)據(jù)的表示方式都是相同的。通過緩入連接池直至達(dá)到額定的最小連接對象數(shù)量。以沖重復(fù)使用相同的數(shù)據(jù)集合可以提高性能(例如排后系統(tǒng)會根據(jù)需要新建和加入連接對象,-直到序、搜索或過濾數(shù)據(jù))并且避免了服務(wù)器長時間維達(dá)最大連接對象數(shù)量限額為止。如果程序請求一護(hù)數(shù)據(jù)源連接所帶來的開銷。在使用DataReader返個連接對象時沒有空閑的連接對象可用,且連接池回的行上進(jìn)行擴(kuò)展處理,將使連接存在的時間比必里面的對象數(shù)量已達(dá)到上限則請求被放入隊(duì)列,要的更長,從而降低效率。另-方面 與DataReader--旦有連接被釋放回緩沖池就立即取出使用。除.相比,DataSet 需要內(nèi)存的開銷,如果內(nèi)存不是要考了服務(wù)器的連接池功能,ADO.NET 還提供了客戶慮的問題,并且需要對數(shù)據(jù)進(jìn)行修改或者任意的檢端連接池功能,可供單個進(jìn)程中參與連接的兩個數(shù)索,那么完全斷開連接內(nèi)存中的數(shù)據(jù)緩存所提供的據(jù)提供程序使用。充分地采用連接池,可以改善性功能就可以更好地滿足程序的需要。能并促進(jìn)應(yīng)用程序存取數(shù)據(jù)的可伸縮性。對于一些經(jīng)常沒有發(fā)生變化的結(jié)果集,可以通4使用存儲過程來提高性能過緩存DataSet來提高應(yīng)用程序的性能,即不是從數(shù)據(jù)庫中為每次檢索請求數(shù)據(jù),而是將DataSet 放存儲過程是數(shù)據(jù)庫的一個關(guān)鍵組件,它在性能入服務(wù)器的緩存中,每次請求時,可 以檢查DataSet :和開發(fā)方面有很多優(yōu)點(diǎn)。存儲過程是一組SQL語的緩存,在不存在DataSet 的緩存版本的情況下才句,這些語句是已編譯到被命名的單一的單元中連接到數(shù)據(jù)庫,這樣可以減小連接的開銷提高訪被編譯后的存儲過程具有原子性存儲在要使用它問性能。們的數(shù)據(jù)庫中。它可以是簡單的只有一個單-的另外,還可以采用類型化的DataSet來提高性SELECT語句,也可以包含多個執(zhí)行復(fù)雜計(jì)算和更能。類型化DataSet是從標(biāo)準(zhǔn)DataSet 類繼承而來新許多表的語句。的,由于在標(biāo)準(zhǔn)DataSet中,每次啟動應(yīng)用程序時在程序中使用存儲過程能提高訪問數(shù)據(jù)庫的必須動態(tài)建立數(shù)據(jù)的架構(gòu)(其中包括表、關(guān)系、列速度。與標(biāo)準(zhǔn)的SQL語句不同存儲過程是經(jīng)過數(shù)現(xiàn)等),但使用類型化DataSet可以把數(shù)據(jù)的架構(gòu)預(yù)據(jù)庫編譯和優(yōu)化的其中的優(yōu)化操作包括使用存儲代先在派生類中建立起來。這就是說,-旦在設(shè)計(jì)時過程在運(yùn)行時所需要的執(zhí)行計(jì)劃的信息,并且緩存計(jì)建立了類型化的DataSet,在運(yùn)行時就不再需要建了該執(zhí)行計(jì)劃。有了優(yōu)化的執(zhí)行計(jì)劃執(zhí)行存儲過立數(shù)據(jù)的結(jié)構(gòu)了。如果在設(shè)計(jì)階段就知道了數(shù)據(jù)程時會節(jié)約很多的時間在多次調(diào)用存儲進(jìn)程時更機(jī)的架構(gòu)通常將使用類型化DataSet。是明顯。另一方面存儲過程能減少網(wǎng)絡(luò)通信客總戶應(yīng)用中國煤化工句就可以執(zhí)行多第采用連接池條SQL!YHCNMHG程能提供眾多的優(yōu)數(shù)據(jù)庫連接是很有價(jià)值的資源但是它也很昂點(diǎn),因此在應(yīng)用ADO.NET訪問數(shù)據(jù)庫時,應(yīng)該考九七M(jìn)ODERN COMPUTER 2004.10期應(yīng)用技術(shù)慮使用存儲過程來提高性能,ADO.NET的三種數(shù)它被關(guān)閉的話)如果Fill或Update方法打開了連據(jù)提供程序都支持存儲過程。在ADO.NET中使用接,Fill 或Update將在操作完成時關(guān)閉它。為了提存儲過程時只要把相應(yīng)的命令對象的類型設(shè)置成高性能,只在必要時保持?jǐn)?shù)據(jù)庫連接打開,同時為StoredProcedure然后傳遞存儲過程的名稱就可以多個操作減少打開和關(guān)閉連接的次數(shù)。調(diào)用存儲過程并且可以設(shè)置輸入、輸出類型的參(5)用預(yù)先排序的數(shù)據(jù)數(shù)來傳值。ADO.NET對象模式可以很容易地實(shí)現(xiàn)排序??梢詣?chuàng)建一個DataView對象并設(shè)置其Sort屬性;5其他方法ADO.NETruntime查看新的排序表達(dá)式并為視圖(1選擇適當(dāng)?shù)臄?shù)據(jù)源重編索引。該步驟是在內(nèi)存中實(shí)現(xiàn)的,但速度并不為了使應(yīng)用程序獲得最佳的性能需要使用最央。排序的花費(fèi)很高,更重要的是,它并不是個線適合數(shù)據(jù)源的.NET框架組件數(shù)據(jù)提供程序。當(dāng)連性操作(linearoperation)對一組數(shù)據(jù)進(jìn)行排序需接到SQL Server7.0及以上版本時,為了獲得最佳要n* log(n)的計(jì)算成本隨著需要排序的條目數(shù)量性能,應(yīng)該使用SQLServer.NET數(shù)據(jù)提供程序。的增加,直 線增加的計(jì)算成本是很大的。在Web應(yīng)SQLServer.NET數(shù)據(jù)提供程序設(shè)計(jì)為直接訪問用程序中動態(tài)排序?qū)π阅艿挠绊懯窍喈?dāng)大的。因SQL Server沒有其他附加的技術(shù)層。而其他數(shù)據(jù)源此應(yīng)該限制應(yīng)用程序中的排序盡可能地運(yùn)用預(yù)的數(shù)據(jù)訪問則存在要穿越托管-非托管邊界的開銷。先排序的數(shù)據(jù)。(2往返操作在任何時候創(chuàng)建用于任何數(shù)據(jù)訪問的應(yīng)用程結(jié)語序,首先要使得往返數(shù)據(jù)源的次數(shù)絕對最小并且ADO.NET是Microsoft.NET 戰(zhàn)略的一個組成往返的數(shù)據(jù)量最小。除了客戶程序所需要的數(shù)據(jù)部分是為分布式程序開發(fā)量身定做的,如何適當(dāng)之外絕對不要請求更多的數(shù)據(jù)。當(dāng)使用不返回行地利用ADO.NET提供的強(qiáng)大功能來提高數(shù)據(jù)訪的SQL語句時類似修改數(shù)據(jù)(例如插入、更新或問的性能這是熟悉ADO.NET的開發(fā)人員所關(guān)心者刪除)或者只返回輸出參數(shù)或值,使用Command.的問題。本文在充分分析了ADO.NET各組件的工ExecuteNonQuery來減少往返開銷。如果你希望返作原理后給出了優(yōu)化性能的技術(shù)和方法。當(dāng)然,回單個值,例 如Count、Sum、 或者Avg ,可以使用上面所分析的各種技術(shù)和方法都具有-定的適應(yīng)Command.ExecuteScalar. ExecuteScalar 返回第一行范圍只有充分地分析所要設(shè)計(jì)的程序,才能極大第-列的值,返回的結(jié)果集是數(shù)量值。ExecuteScalar地優(yōu)化程序訪問數(shù)據(jù)的性能。通過-步就完成,不僅簡化了代碼而且提高了性能。參考文獻(xiàn)[ 1 ]Kouresh Ardestani ,Kevin Hoffman ,Donald Xie.高效掌握(3采用類型化方法訪問結(jié)果集中的列值A(chǔ)DO.NET-- C# 編程篇.張哲峰譯.北京清華大學(xué)出AOD.NET提供了多種從返回的結(jié)果集中訪問版社,2003行中的列的值,可以按下面的一個方法檢索行的列[2陶剛. ADO.NET使用經(jīng)驗(yàn)集. htp :// tech.ccidnet.com/的值:按名字指定列、按序號執(zhí)行列或者使用-一個pub/ article/c317_ a45023_ pl1.html 2003/4/28類型化的方法并以列號作為參數(shù)。第-種方法提.[ 3徐靜.ADO.NET調(diào)用存儲過程的方法.電腦與信息技術(shù),現(xiàn)代供了編程的可讀性但它必須以一個字符串的形式2003(3)計(jì)傳遞列名并迫使程序在當(dāng)前行的各行中搜索具有[ 4 Paul Dickinson ,Fabio Claudio.ADO.NET高級編程一-算指定名字的列,因此降低了訪問的性能;第二種方VB.NET編程篇.譚建波,李立新譯.北京清華大學(xué)出版社2003機(jī)法能把指定的列的值返回但由于沒有指定返回?cái)?shù)[5 ]John Kauffman ,Brian Matsik 等. ASP.NET數(shù)據(jù)庫入門經(jīng)據(jù)的類型,因而可能存在值的類型轉(zhuǎn)化。因而使用..典-- -C#編程篇.張哲峰黃翔宇譯.北京清華大學(xué)出第二種方法,能提高訪問列的值的性能。第( 4 )用數(shù)據(jù)適配器DataAdapter 優(yōu)化連接[6孟現(xiàn)中國煤化工據(jù)訪問模型研究.微數(shù)據(jù)適配器DataAdapter的Fill和Update方MHCNMH G九法自動地為相關(guān)的命令屬性打開特定的連接(如果(收稿日期2004-05-08 )七(英文摘要見第55頁)兜8 MODERN COMPUTER 20010網(wǎng)絡(luò)縱橫阻力。必須指出的是領(lǐng)導(dǎo)層的確認(rèn)是企業(yè)網(wǎng)絡(luò)安認(rèn)的基于時間的動態(tài)安全模型,而安全策略就是動全策略能否順利實(shí)施的關(guān)鍵環(huán)節(jié)。態(tài)安全模型的核心。在企業(yè)網(wǎng)中建立網(wǎng)絡(luò)安全策實(shí)施是對安全策略最好的檢測,在實(shí)施過程略大致可以分為風(fēng)險(xiǎn)分析和評估、書寫各項(xiàng)網(wǎng)絡(luò)安中一方面會發(fā)現(xiàn)所制定的安全策略的不足,另-全策略、評估和實(shí)施等步驟整個過程將是一個不方面也會根據(jù)實(shí)際情況的變化為安全策略提出新斷完善的、螺旋式并不斷上升的過程。的要求,這些為安全策略的進(jìn)一步完善提供了源動力。安全策略不斷完善的過程是一個螺旋式、不參考文獻(xiàn)斷上升”的過程。[1何海濤羅笑南郭清順.Newflow在邊界網(wǎng)流量測量中的,應(yīng)用研究.計(jì)算機(jī)工程與應(yīng)用2004( 4)結(jié)語[2 Scott Barman. Writing Information Security Polices. New隨著企業(yè)信息化的不斷深入,-個企業(yè)對企業(yè)Riders Publishing,2002[3 ERT. http :/ www.cert.org網(wǎng)的依賴程度越來越高因而必須要正視網(wǎng)絡(luò)安全[4 BANS. http :/ www sans.org問題、建立合理的安全策略和安全框架,以確保企(收稿日期2004-05-08 )業(yè)網(wǎng)能夠可靠、正常、高效地運(yùn)行。P2DR 是一套公The Study on the Security Policy ofthe Enterprise Ne tw orkLIU Bao-lu'GU L2( 1. Faculty of Information Technology Macav University of Science and Technology, Macao ;2.Guangzhou City Investigation Design and Research Institute of w ater Conservancy and Hydropower, Guangzhou 510640 China )Abs tract :This paper introduces P2DR(Policy ,Protection ,Detection ,Response),which is the important dynamic securitymodel, and proposes that to establish a sensible security policy is the key to guarantee the security of theenterprise network. Also it iluminates how to develop the successful network security policies.Key words : P2DR ;Security Policy ;Enterprise Network(上接第38頁)P erformance Optimizations of ADO.NET現(xiàn)代計(jì)LIU Wan- -shou笪機(jī)( Department of Computer Science, South China Normal University, Guangzhou 510631 China )Abs tract :This paper analyzes the performance of two typical data access中國煤化工he sored第procedure and connction pooling technology which are bene. access .performance. Other ways for optimizing data access performanc.MYHCNMHG_paper.九Key words :ADO.NET ;DataSet ;DataReader ;Stored Procedure ;Connection Pooling七M(jìn)ODERN COMPUTER 2004.10期
-
C4烯烴制丙烯催化劑 2020-09-30
-
煤基聚乙醇酸技術(shù)進(jìn)展 2020-09-30
-
生物質(zhì)能的應(yīng)用工程 2020-09-30
-
我國甲醇工業(yè)現(xiàn)狀 2020-09-30
-
石油化工設(shè)備腐蝕與防護(hù)參考書十本免費(fèi)下載,絕版珍藏 2020-09-30
-
四噴嘴水煤漿氣化爐工業(yè)應(yīng)用情況簡介 2020-09-30
-
Lurgi和ICI低壓甲醇合成工藝比較 2020-09-30
-
甲醇制芳烴研究進(jìn)展 2020-09-30
-
精甲醇及MTO級甲醇精餾工藝技術(shù)進(jìn)展 2020-09-30




