亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ADO.NET的數(shù)據(jù)訪問編碼優(yōu)化

        2013-06-27 05:51:08蔡朝暉付丹丹
        大慶師范學院學報 2013年6期
        關鍵詞:數(shù)據(jù)庫優(yōu)化

        蔡朝暉,付丹丹,蘇 丹

        (大慶師范學院計算機科學與信息技術學院,黑龍江大慶163712)

        基于ADO.NET的數(shù)據(jù)訪問編碼優(yōu)化

        蔡朝暉,付丹丹,蘇 丹

        (大慶師范學院計算機科學與信息技術學院,黑龍江大慶163712)

        分析了數(shù)據(jù)庫應用程序在運行中出現(xiàn)的性能問題,進而討論了基于ADO.NET的數(shù)據(jù)庫訪問技術的優(yōu)化原則,并針對具體的應用程序設計編寫了相應的優(yōu)化數(shù)據(jù)訪問代碼。

        數(shù)據(jù)訪問;數(shù)據(jù)庫中間件;性能優(yōu)化;ADO.NET技術

        0 引言

        隨著計算機硬件變得更快更廉價,大多數(shù)數(shù)據(jù)庫應用程序通過網(wǎng)絡與數(shù)據(jù)庫進行通信,而不再是直接通過單個計算機中的內(nèi)部進程進行通信。與此同時,計算機軟件則需要提供在應用程序和數(shù)據(jù)庫之間的連接,即所謂的數(shù)據(jù)庫中間件,因此企業(yè)出現(xiàn)了對數(shù)據(jù)庫連接標準的需求,通用的應用程序編程接口(application programming interface,API)應運而生。例如ODBC(Open Database Connectivity,開放式數(shù)據(jù)庫連接)的出現(xiàn),解決了開發(fā)人員對于不同數(shù)據(jù)源Microsoft SQL Server、Oracle和IBM DB2等的數(shù)據(jù)訪問的統(tǒng)一接口問題。

        隨著數(shù)據(jù)庫連接標準的出現(xiàn),數(shù)據(jù)庫驅(qū)動程序被添加到數(shù)據(jù)庫中間件層,即數(shù)據(jù)庫驅(qū)動程序處理基于標準的API函數(shù)調(diào)用,向數(shù)據(jù)庫提交SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)請求,并向應用程序返回結(jié)果。但同時數(shù)據(jù)訪問中間件的使用,也為應用程序的性能問題添加了新的隱患。

        目前,開發(fā)人員面臨的系統(tǒng)性能問題是:即使數(shù)據(jù)庫調(diào)試得很好,數(shù)據(jù)庫應用程序的運行情況卻并不總是盡如人意。其主要原因是:相比于之前處理請求時間大多用在DBMS(Data Base Management System,數(shù)據(jù)庫管理系統(tǒng))上,近幾年,應用系統(tǒng)處理請求時間的75%~95%則花費在了數(shù)據(jù)庫中間件上[1]。

        在本文中,我們討論了基于ADO.NET(ActiveX Data Objects for the.NET)的數(shù)據(jù)庫訪問技術的優(yōu)化原則和方法,并針對具體教學項目案例《畢業(yè)論文管理系統(tǒng)》設計編寫了相應的數(shù)據(jù)訪問代碼。

        1 應用程序性能問題分析

        數(shù)據(jù)庫應用程序中的性能問題,一般由于以下4個方面原因引起的[1]:

        1)網(wǎng)絡通信數(shù)據(jù)包的容量設定

        網(wǎng)絡常見性能問題是完成一個操作需要的往返次數(shù)。在應用程序和數(shù)據(jù)庫之間發(fā)送的數(shù)據(jù)包數(shù)越少,意味著在數(shù)據(jù)庫和應用程序之間的往返次數(shù)越少。

        2)數(shù)據(jù)庫驅(qū)動程序的選擇

        在數(shù)據(jù)庫應用程序部署中,選擇使用哪個驅(qū)動程序,對性能有很大的影響。一個好的數(shù)據(jù)庫驅(qū)動程序,能夠更加高效地處理連接池和內(nèi)存管理。

        3)環(huán)境配置

        內(nèi)存的適時分配與釋放、服務器端與客戶端彼此操作系統(tǒng)的字節(jié)順序是否匹配等都會影響應用程序性能;另外,在當前虛擬化的新趨勢下,硬件資源的使用很容易達到極限,檢測產(chǎn)生硬件(內(nèi)存、磁盤I/O、CPU以及網(wǎng)絡適配器)瓶頸的原因變得更加困難。

        4)數(shù)據(jù)庫應用程序編碼不良

        如果應用程序代碼的效率不高,應用程序向數(shù)據(jù)庫中間件發(fā)送數(shù)據(jù)請求的性能就會降低。例如對事務管理的提交方式,如果使用默認的自動提交模式就會對應用程序造成嚴重的性能限制,因為對于大多基于標準的應用程序,默認的事務模式需要數(shù)據(jù)庫驅(qū)動程序在每個API請求之后處理昂貴的Commit操作。

        2 基于ADO.NET的性能優(yōu)化原則

        2.1 ADO.NET概述

        ADO.NET是一組用于和數(shù)據(jù)源進行交互的面向?qū)ο箢悗?,用于讀寫數(shù)據(jù)庫,是Microsoft希望在.NET編程環(huán)境中優(yōu)先使用的數(shù)據(jù)訪問接口。訪問過程如圖1所示。

        圖1 ADO.NET數(shù)據(jù)訪問過程

        2.2 ADO.NET數(shù)據(jù)訪問模式

        在ADO.NET組件中包含兩個核心組件,分別是.NET Framework數(shù)據(jù)提供程序和數(shù)據(jù)集DataSet。

        基于ADO.NET的客戶端應用程序有兩種數(shù)據(jù)訪問模式,即通過DataSet對象訪問數(shù)據(jù)模式和通過DataReader對象訪問數(shù)據(jù)模式。如圖2所示。

        圖2 ADO.NET數(shù)據(jù)訪問模式

        ADO.NET的兩種數(shù)據(jù)訪問模式本身就為應用程序提供了可優(yōu)化選擇:使用DataSet對象是數(shù)據(jù)集斷開式(也稱非連接式)數(shù)據(jù)訪問模式,使用DataReader對象則是連接式數(shù)據(jù)訪問模式。

        其中的DataSet對象是ADO.NET技術基于ADO技術的重大變化和革新,旨在解決Web應用程序的松耦合特性以及其在本質(zhì)上互不關聯(lián)的特性[2]。

        如圖2所示,DataSet對象通過DataAdepter對象訪問數(shù)據(jù)庫,它不直接對數(shù)據(jù)庫進行訪問,從而實現(xiàn)了斷開式的數(shù)據(jù)庫訪問。DataSet對象代表數(shù)據(jù)庫的內(nèi)存緩存[2],由于其獨立于數(shù)據(jù)庫,所以配合了連接池的管理方式,在數(shù)據(jù)庫連接上為系統(tǒng)性能優(yōu)化提供了保證。

        2.3 ADO.NET訪問數(shù)據(jù)庫方法及步驟

        (1)使用連接對象connection連接數(shù)據(jù)源;

        (2)使用命令對象Command執(zhí)行SQL語句或存儲過程操縱數(shù)據(jù)庫;

        (3)使用數(shù)據(jù)讀取器對象DataReader讀取數(shù)據(jù),或者使用數(shù)據(jù)集對象DataSet和數(shù)據(jù)適配器對象DataAdapter訪問數(shù)據(jù)庫。

        2.4 性能優(yōu)化通用原則

        在應用程序開發(fā)中,對ADO.NET應用程序進行性能優(yōu)化是一件很復雜的事情。首先,當代碼運行緩慢時,數(shù)據(jù)提供程序是不會拋出異常進行通知的;其次,因為不同數(shù)據(jù)提供程序之間,編程概念有一定的差異,編寫.NET應用程序比編寫ODBC或JDBC應用程序更復雜。

        所以,所謂的性能優(yōu)化通用原則[1],是指我們所設計的數(shù)據(jù)訪問編碼,它們具體實現(xiàn)了以下4個目標中的一個或多個:

        (1)降低網(wǎng)絡通信量;

        (2)限制磁盤I/O;

        (3)優(yōu)化應用程序和驅(qū)動程序之間的交互;

        (4)簡化查詢。

        3 ADO.NET編碼優(yōu)化建議

        3.1 使用連接池管理連接

        數(shù)據(jù)庫連接可能需要付出較昂貴的時間和資源成本,為了緩解這個成本問題,許多數(shù)據(jù)提供者都支持連接池(Connection Pooling)。默認情況下,ADO.NET中啟用連接池,除非以顯式形式禁用,否則,連接在應用中打開和關閉時,池進程將對連接進行優(yōu)化。

        優(yōu)化原理[2]:連接池可以減少新連接需要打開的次數(shù)。池進程保持物理連接的所有權(quán)。通過為每個給定的連接配置保留一組連接來管理連接。只要用戶在連接上調(diào)用Open,池進程就會檢查池中是否有可用的連接。如果某個池連接可用,會將該連接返回給調(diào)用者,而不是打開新連接。應用程序在該連接上調(diào)用Close時,池進程會將該連接返回到活動連接池中,而不是真正關閉連接。連接返回到池中后,即可在下一個Open調(diào)用中使用。

        3.2 使用手動提交模式管理事務

        提交或回滾事務是比較緩慢的,因為涉及到磁盤I/O,同時潛在地需要大量的網(wǎng)絡往返,通常建議在應用程序中關閉自動提交模式,并同時使用手動提交模式;另外,除非必須使用分布式事務,否則應使用本地事務。

        優(yōu)化原理:自動提交模式下,每次成功操作之后,數(shù)據(jù)提供程序就向數(shù)據(jù)庫發(fā)送一個提交請求,需要進行一次網(wǎng)絡往返;而使用手動提交模式,應用程序可以控制何時提交數(shù)據(jù)庫工作,避免了不必要的事務自動提交。至于優(yōu)先選擇本地事務模型,是由于本地事務訪問和更新位于單個數(shù)據(jù)庫中的數(shù)據(jù),而分布式事務訪問和更新位于多個數(shù)據(jù)庫中的數(shù)據(jù),事務須協(xié)調(diào)這些數(shù)據(jù)庫。

        3.3 選擇合適的SQL語句、程序和方法

        (1)選擇執(zhí)行SQL語句的Command對象方法

        使用Command對象方法執(zhí)行SQL語句時,有選擇地使用以下方法:ExecuteNonQuery、ExecuteReader、ExecuteScalar,可以得到最佳性能。

        執(zhí)行不檢索數(shù)據(jù)的SQL語句(如Update、Insert、Delete),使用ExecuteNonQuery方法,因為此方法只返回影響記錄數(shù)量,不返回實際記錄;如果SQL語句檢索單個數(shù)值(總數(shù)或個數(shù)),使用ExecuteScalar方法,因為此方法返回結(jié)果集中第一條記錄的第一列。

        (2)選擇使用語句或預先編譯的語句

        如果正在使用只會執(zhí)行一次的SQL語句,選擇使用語句,因為該語句不會被放入語句池,這樣可以避免相應的在池中查找該語句的負擔。當SQL語句執(zhí)行頻率較高時,建議使用預先編譯的Command對象。

        (3)使用參數(shù)數(shù)組或批處理

        當更新大量數(shù)據(jù)時,可以使用參數(shù)數(shù)組或SQL語句的批處理。盡管參數(shù)數(shù)組使用更多的CPU循環(huán),但是通過減少網(wǎng)絡往返次數(shù)可以提升性能。

        (4)使用批量加載

        如果有大量數(shù)據(jù)需要插入到數(shù)據(jù)庫表中,使用批量加載比參數(shù)數(shù)組更快。使用批量加載時,記錄在一個連續(xù)的流中從數(shù)據(jù)庫客戶端發(fā)送到數(shù)據(jù)庫,從而不會生成額外的網(wǎng)絡往返;此外,當執(zhí)行批量加載時,數(shù)據(jù)庫能夠優(yōu)化插入記錄的方式。但使用批量加載可能會忽略參照完整性,從而引起數(shù)據(jù)的一致性問題。

        (5)使用純托管提供程序

        使用純托管代碼,.NET程序集運行于CLR(Command Language Runtime,公共語言運行庫)內(nèi)部,與數(shù)據(jù)提供程序連接到非托管代碼或在CLR外部運行時相比,內(nèi)部調(diào)用的相關開銷會降低5%~100%。尤其是應用程序服務器運行繁忙時,性能對比更明顯。

        3.4 控制檢索數(shù)據(jù)量

        (1)設計應用程序從select列表中排除長數(shù)據(jù)

        通過網(wǎng)絡檢索長數(shù)據(jù)速度比較慢,并且需要消耗大量的資源。而且大多用戶實際上不希望查看長數(shù)據(jù)。以下列出盡量避免使用的長數(shù)據(jù)類型:大XML數(shù)據(jù)、長文本、長二進制數(shù)據(jù)、Clob以及Blob。

        (2)限制檢索數(shù)據(jù)量

        限制在驅(qū)動程序和數(shù)據(jù)庫服務器之間的網(wǎng)絡通信量,可以通過確保select語句及其所使用where子句限制檢索返回結(jié)果的數(shù)據(jù)量;當不能避免檢索會產(chǎn)生大量網(wǎng)絡通信量時,應用程序可以限制通過網(wǎng)絡發(fā)送的記錄數(shù)量,同時降低通過網(wǎng)絡發(fā)送的每條記錄的大小,從而控制數(shù)據(jù)庫向驅(qū)動程序發(fā)送的數(shù)據(jù)量。

        (3)選擇處理效率比較高的數(shù)據(jù)類型

        處理速度從最快到最慢的數(shù)據(jù)類型:binary(二進制),int、smallint、float(32位整數(shù)、16位整數(shù)、64位小數(shù)),decimal(十進制),timestamp(時間戳),char(字符)。

        圖3顯示了當屬性列分別定義為64位整數(shù)類型與decimal(20)類型時,每秒返回的記錄數(shù)量的比較。

        圖3 不同數(shù)據(jù)類型的性能比較

        4 數(shù)據(jù)訪問編碼實例及優(yōu)化分析

        針對《畢業(yè)論文管理系統(tǒng)》中的“修改選題”功能,采用了上述優(yōu)化建議,規(guī)避了數(shù)據(jù)訪問中影響應用程序性能的主要問題,設計編寫了相關的優(yōu)化測試代碼。其優(yōu)化的主要方面包括:

        (1)及時關閉不使用的數(shù)據(jù)庫連接,當然這些連接還保持在連接池中;

        (2)設置管理事務的提交模式為手動提交,其中設計相關的完整操作“修改選題”在同一事務中;

        (3)使用純托管提供程序,即使用SQL Server專用的內(nèi)置.NET數(shù)據(jù)提供者對基礎功能進行直接訪問;

        (4)選用DataReader對象查看“論文選題”情況;

        (5)選用DataSet對象完成“修改題目”操作的相關數(shù)據(jù)庫表數(shù)據(jù)的更新,并使用顯示方式更新數(shù)據(jù)。

        4.1 編碼實例

        //以下代碼用C#語言編寫

        說明:①連接字符串中設置Integrated Security=SSPI(集成安全性)時,可以使用windows身份驗證;連接字符串中設置Connect Timeout=5,連接被銷毀前,此連接在連接池中生存的最短時間為5秒;連接字符串中設置MultipleActiveResultSets=true,為數(shù)據(jù)連接復用。

        ②交互操作部分代碼略去。

        4.2 編碼優(yōu)化分析

        (1)使用using指令引用專用內(nèi)置的.NET數(shù)據(jù)提供程序;

        (2)使用try/catch塊處理連接異常,同時在finally塊中顯示關閉連接,確保及時關閉不使用的連接,避免等待垃圾收集器清除不用連接的時間,而間接影響其他連接的等待時間;

        (3)使用Transaction對象處理一個功能的兩部分操作,即通過事務管理,確保數(shù)據(jù)庫的一致性和完整性。同時使用事務的顯示提交或回滾,避免了不必要的事務自動提交;

        (4)檢索大量只讀數(shù)據(jù)時,選DataReader對象;(5)插入、更新或刪除數(shù)據(jù)時,選用DataSet對象。

        5 結(jié)語

        數(shù)據(jù)庫應用程序設計會直接影響所開發(fā)的應用程序性能,軟件設計人員和開發(fā)人員應特別注意這一點。由于為了收集數(shù)據(jù)庫的相關信息,應用程序經(jīng)常需要通過代碼建立連接,而建立連接對性能的影響非常大,所以為了達到最好的性能,必須考慮相關的數(shù)據(jù)庫應用程序設計。

        本文編碼優(yōu)化涉及的幾個關鍵的應用程序功能區(qū)包括:數(shù)據(jù)庫連接配置、事務提交模式、SQL語句執(zhí)行以及數(shù)據(jù)檢索設計。

        [1]John Goodson,Robert A.Steward.數(shù)據(jù)訪問寶典[M].北京:清華大學出版社,2010:155-176.

        [2]龔根華,王煒立.ADO.NET數(shù)據(jù)訪問技術[M].北京:清華大學出版社,2012:25-33,74-75,87-138.

        [3]Shawn Eildermuth,Mark Blomsma,Jim Wightman.ADO.NET應用程序開發(fā)[M].北京:清華大學出版社,2010:1-33,105-120.

        蔡朝暉(1968-),女,黑龍江大慶人,大慶師范學院計算機科學與信息技術學院副教授,博士生,從事數(shù)據(jù)庫與知識庫研究。

        大慶師范學院教學改革研究資助項目(JY1230)。

        G642

        A

        2095-0063(2013)06-0026-05

        2013-08-21

        猜你喜歡
        數(shù)據(jù)庫優(yōu)化
        超限高層建筑結(jié)構(gòu)設計與優(yōu)化思考
        民用建筑防煙排煙設計優(yōu)化探討
        關于優(yōu)化消防安全告知承諾的一些思考
        一道優(yōu)化題的幾何解法
        由“形”啟“數(shù)”優(yōu)化運算——以2021年解析幾何高考題為例
        數(shù)據(jù)庫
        財經(jīng)(2017年15期)2017-07-03 22:40:49
        數(shù)據(jù)庫
        財經(jīng)(2017年2期)2017-03-10 14:35:35
        數(shù)據(jù)庫
        財經(jīng)(2016年15期)2016-06-03 07:38:02
        數(shù)據(jù)庫
        財經(jīng)(2016年3期)2016-03-07 07:44:46
        數(shù)據(jù)庫
        財經(jīng)(2016年6期)2016-02-24 07:41:51
        久久久99精品免费视频| 成美女黄网站18禁免费| 免费人成网站在线观看| 人妻夜夜爽天天爽三区丁香花| 夜鲁很鲁在线视频| 久久天天爽夜夜摸| av男人操美女一区二区三区| 日韩少妇人妻中文视频| 欧美一区二区三区久久综| 国产91中文| 精品少妇后入一区二区三区| 日本一区二区视频在线| 日韩中文字幕免费视频| 69av视频在线观看| 全免费a级毛片| 亚洲欧美日韩精品高清| 成人国产高清av一区二区三区| 国产精品99精品久久免费| 久久久久香蕉国产线看观看伊| 亚洲综合久久久| 国产一区二区三区av香蕉| 日韩在线观看入口一二三四| 亚洲av成人中文无码专区| 亚洲VA中文字幕欧美VA丝袜| 男人一插就想射的原因| 国产做无码视频在线观看| a级毛片高清免费视频就| 加勒比精品久久一区二区三区| 国产精品一品二区三区| 中文字幕一区二区中出后入| 黑人巨大精品欧美一区二区| 久久久久久亚洲AV成人无码国产| 国产av精品一区二区三区不卡| 亚洲人成人无码www| 熟女性饥渴一区二区三区| 国产精品自产拍在线观看免费| 最全精品自拍视频在线| 国产成人精品久久亚洲高清不卡| 极品美女扒开粉嫩小泬| 久久久精品亚洲懂色av| 免费久久99精品国产|