認(rèn)識(shí)與優(yōu)化 connection 對(duì)象
發(fā)表時(shí)間:2023-08-11 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在ASP的數(shù)據(jù)庫(kù)編程中,connection對(duì)象是我們不可能離開(kāi)的一個(gè)對(duì)象,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何的操作,比如更新記錄,插入,刪除,檢索等,都必須借助于connection對(duì)象來(lái)完成。形象地來(lái)說(shuō),con...
在ASP的數(shù)據(jù)庫(kù)編程中,connection對(duì)象是我們不可能離開(kāi)的一個(gè)對(duì)象,在對(duì)數(shù)據(jù)庫(kù)進(jìn)行任何的操作,比如更新記錄,插入,刪除,檢索等,都必須借助于connection對(duì)象來(lái)完成。形象地來(lái)說(shuō),connection對(duì)象就是程序于數(shù)據(jù)庫(kù)溝通的管道,所有對(duì)數(shù)據(jù)庫(kù)的操作,都必須經(jīng)過(guò)它,因此,無(wú)論我們以何種方式連接數(shù)據(jù)庫(kù)前,總是少不了執(zhí)行下列的代碼。
Set conn = Server.CreateObject("ADODB.Connection")
建立一個(gè)connection對(duì)象的實(shí)例變量,然后在它的基礎(chǔ)上建立recorderset對(duì)象或是command對(duì)象來(lái)操作數(shù)據(jù)庫(kù)。既然connection對(duì)象是如此的重要,那么如何優(yōu)化和管理好connection對(duì)象對(duì)數(shù)據(jù)庫(kù)程序來(lái)說(shuō)是極其重要的,它關(guān)系到程序的性能。
每當(dāng)一個(gè)客戶執(zhí)行數(shù)據(jù)庫(kù)操作時(shí),就需要借助一個(gè)connection對(duì)象,而每個(gè)connection對(duì)象就會(huì)占用服務(wù)器的一部分資源,而數(shù)據(jù)庫(kù)的同時(shí)連接數(shù)不可能是無(wú)限的,因此。在考濾要提供高性能的數(shù)據(jù)庫(kù)web程序時(shí),我們需要考濾如何去減少服務(wù)器的開(kāi)消。一般來(lái)說(shuō)。每個(gè)asp頁(yè)面中建立一個(gè)connection對(duì)象,都會(huì)在服務(wù)器中產(chǎn)生一個(gè)對(duì)數(shù)據(jù)庫(kù)的連接。而不同的頁(yè)面的connection對(duì)象是不能共享的。那么。我們可不可以使同一個(gè)用戶所訪問(wèn)的不同頁(yè)面共享一個(gè)connection連接通道呢。
大家不妨想一想我們的asp六大內(nèi)建對(duì)象的session對(duì)象,他可以為某個(gè)特定的用戶來(lái)保存私有的數(shù)據(jù),如果我們把connection對(duì)象保存在session對(duì)象中,是否可以使不同的asp頁(yè)面都使用同一個(gè)連接通道呢?看看下面的這段程序。
<%
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("/")&"/news/data/data.mdb"
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
session("conn")=conn
Set rs = Server.CreateObject("ADODB.Recordset")
sql="select * from data"
cn=session("conn")
rs.open sql,cn,3,2
%>
在這個(gè)數(shù)據(jù)庫(kù)連接中。我們使用了session對(duì)象,首先,建立一個(gè)conn的連接對(duì)象,然后連接到數(shù)據(jù)庫(kù)data.mdb中,取得連接句柄后,把它保存在session("conn")這個(gè)session會(huì)話變量中,在打開(kāi)記錄集前,從session("conn")中取出句柄,借助于session對(duì)象。我們可以使不同的ASP頁(yè)面共用一個(gè)連接對(duì)象,減少了對(duì)服務(wù)器內(nèi)存的開(kāi)消,而我們也不需要擔(dān)心,當(dāng)一個(gè)客戶因?yàn)殄e(cuò)誤操作導(dǎo)致服務(wù)器不能析放該被占用的session連接對(duì)象,因?yàn)槲覀冎烂總(gè)客戶的session對(duì)象是有一定的生存期限的,過(guò)了這個(gè)期限,服務(wù)器就會(huì)自動(dòng)把它析放掉。
而ODBC3.0所提供的連接池connection pooling。也能有效地提高數(shù)據(jù)庫(kù)的運(yùn)行性能。我們知道,在眾多的asp頁(yè)面中生成的connection對(duì)象,總是處在不斷建立連接,解除連接,析放連接中。
如何能高效的管理和使用好這些被廢棄的連接,也可以在一定程序上大大提高運(yùn)行效率。而ODBC3.0則提供了這樣的功能,它能聰明的把需要新建立的連接引導(dǎo)至即將廢棄的connection對(duì)象上,反復(fù)地使用它。這樣,就能節(jié)省了不好服務(wù)器的開(kāi)消.