在ASP的數(shù)據(jù)庫編程中,connection對象是我們不可能離開的一個對象,在對數(shù)據(jù)庫進行任何的操作,比如更新記錄,插入,刪除,檢索等,都必須借助于connection對象來完成。形象地來說,connection對象就是程序于數(shù)據(jù)庫溝通的管道,所有對數(shù)據(jù)庫的操作,都必須經(jīng)過它,因此,無論我們以何種方式連接數(shù)據(jù)庫前,總是少不了執(zhí)行下列的代碼。 Set conn = Server.CreateObject("ADODB.Connection") 建立一個connection對象的實例變量,然后在它的基礎上建立recorderset對象或是command對象來操作數(shù)據(jù)庫。既然connection對象是如此的重要,那么如何優(yōu)化和管理好connection對象對數(shù)據(jù)庫程序來說是極其重要的,它關系到程序的性能。
每當一個客戶執(zhí)行數(shù)據(jù)庫操作時,就需要借助一個connection對象,而每個connection對象就會占用服務器的一部分資源,而數(shù)據(jù)庫的同時連接數(shù)不可能是無限的,因此。在考濾要提供高性能的數(shù)據(jù)庫web程序時,我們需要考濾如何去減少服務器的開消。一般來說。每個asp頁面中建立一個connection對象,都會在服務器中產(chǎn)生一個對數(shù)據(jù)庫的連接。而不同的頁面的connection對象是不能共享的。那么。我們可不可以使同一個用戶所訪問的不同頁面共享一個connection連接通道呢。 大家不妨想一想我們的asp六大內(nèi)建對象的session對象,他可以為某個特定的用戶來保存私有的數(shù)據(jù),如果我們把connection對象保存在session對象中,是否可以使不同的asp頁面都使用同一個連接通道呢?看看下面的這段程序。
<%
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
%> 在這個數(shù)據(jù)庫連接中。我們使用了session對象,首先,建立一個conn的連接對象,然后連接到數(shù)據(jù)庫data.mdb中,取得連接句柄后,把它保存在session("conn")這個session會話變量中,在打開記錄集前,從session("conn")中取出句柄,借助于session對象。我們可以使不同的ASP頁面共用一個連接對象,減少了對服務器內(nèi)存的開消,而我們也不需要擔心,當一個客戶因為錯誤操作導致服務器不能析放該被占用的session連接對象,因為我們知道每個客戶的session對象是有一定的生存期限的,過了這個期限,服務器就會自動把它析放掉。 而ODBC3.0所提供的連接池connection pooling。也能有效地提高數(shù)據(jù)庫的運行性能。我們知道,在眾多的asp頁面中生成的connection對象,總是處在不斷建立連接,解除連接,析放連接中。 如何能高效的管理和使用好這些被廢棄的連接,也可以在一定程序上大大提高運行效率。而ODBC3.0則提供了這樣的功能,它能聰明的把需要新建立的連接引導至即將廢棄的connection對象上,反復地使用它。這樣,就能節(jié)省了不好服務器的開消.
出處:
責任編輯:藍色
◎進入論壇網(wǎng)絡編程版塊參加討論
|