|
五、使用記錄集時(shí)是否應(yīng)該創(chuàng)建單獨(dú)的連接對(duì)象? 要正確地回答這個(gè)問(wèn)題,我們必須分析兩種不同條件下的測(cè)試:第一,頁(yè)面只有一個(gè)數(shù)據(jù)庫(kù)事務(wù);第二,頁(yè)面有多個(gè)數(shù)據(jù)庫(kù)事務(wù)。
在前例中,我們創(chuàng)建了一個(gè)單獨(dú)的Connection對(duì)象并將它賦給Recordset的ActiveConnection屬性。然而,如ADO__03.asp所示,我們也可以直接把連接串賦給ActiveConnection屬性,在腳本中初始化和配置Connection對(duì)象這一額外的步驟可以省去。 objRS.ActiveConnection = Application("Conn")
雖然Recordset對(duì)象仍舊要?jiǎng)?chuàng)建一個(gè)連接,但此時(shí)的創(chuàng)建是在高度優(yōu)化的條件下進(jìn)行的。因此,與上一次測(cè)試相比,頁(yè)面開(kāi)銷又下降了23%,而且如預(yù)期的一樣,單個(gè)記錄的顯示時(shí)間沒(méi)有實(shí)質(zhì)的變化。
因此,我們的第二個(gè)規(guī)則如下:
如果只使用一個(gè)記錄集,直接把連接串賦給ActiveConnection屬性。 接下來(lái)我們檢查頁(yè)面用到多個(gè)記錄集時(shí),上述規(guī)則是否仍舊有效。為測(cè)試這種情形,我們引入一個(gè)FOR循環(huán)將前例重復(fù)10次。在這個(gè)測(cè)試中,我們將研究三種變化:
第一,如ADO__04.asp所示,在每一個(gè)循環(huán)中建立和拆除Connection對(duì)象: Dim i For i = 1 to 10
Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open Application("Conn")
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.ActiveConnection = objConn objRS.CursorType = 0 'adOpenForwardOnly objRS.LockType = 1 'adLockReadOnly objRS.Open Application("SQL")
If objRS.EOF Then Response.Write("No Records Found") Else 'write headings ... 'write data ... End If
objRS.Close Set objRS = Nothing objConn.Close Set objConn = Nothing
Next
第二,如ADO__05.asp所示,在循環(huán)外面創(chuàng)建Connection對(duì)象,所有記錄集共享該對(duì)象: Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open Application("Conn")
Dim i For i = 1 to 10 Set objRS = Server.CreateObject("ADODB.Recordset") objRS.ActiveConnection = objConn objRS.CursorType = 0 'adOpenForwardOnly objRS.LockType = 1 'adLockReadOnly objRS.Open Application("SQL")
If objRS.EOF Then Response.Write("No Records Found") Else 'write headings ... 'write data ... End If
objRS.Close Set objRS = Nothing
Next objConn.Close Set objConn = Nothing
第三,如ADO__06.asp所示,在每一個(gè)循環(huán)內(nèi)把連接串賦給ActiveConnection屬性: Dim i For i = 1 to 10
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.ActiveConnection = Application("Conn") objRS.CursorType = 0 'adOpenForwardOnly objRS.LockType = 1 'adLockReadOnly objRS.Open Application("SQL")
If objRS.EOF Then Response.Write("No Records Found") Else 'write headings ... 'write data ... End If
objRS.Close Set objRS = Nothing Next
就象我們可以猜想到的一樣,在循環(huán)內(nèi)創(chuàng)建和拆除連接對(duì)象是效率最差的方法。不過(guò),令人驚異的是,在循環(huán)內(nèi)直接把連接串賦給ActiveConnection屬性只比共享單個(gè)連接對(duì)象稍微慢了一點(diǎn)。
盡管如此,第三規(guī)則應(yīng)該為:
同一頁(yè)面內(nèi)用到多個(gè)記錄集時(shí),創(chuàng)建單一的連接對(duì)象并通過(guò)ActiveConnection屬性共享它。 (出處:熱點(diǎn)網(wǎng)絡(luò))
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!