七、最好用哪種方法提取記錄集?
到目前為止我們一直通過創建Recordset對象提取記錄集,但是ADO也提供了間接的記錄集提取方法。下面的測試比較ADO__03.asp和直接從Connection對象創建記錄集(CONN_01.asp)這兩種方法:
Set objConn = Server.CreateObject("ADODB.Connection") objConn.Open Application("Conn")
Set objRS = objConn.Execute(Application("SQL"))
可以看到頁面開銷略有增加,單個記錄的顯示時間沒有變化。
下面我們再來看看從Command對象直接創建記錄集對象(CMD__02.asp):
Set objCmd = Server.CreateObject("ADODB.Command") objCmd.ActiveConnection = Application("Conn") objCmd.CommandText = Application("SQL")
Set objRS = objCmd.Execute
同樣,頁面開銷也略有增加,而單個記錄的顯示時間沒有本質的變化。后面這兩種方法在性能上的差異很小,但我們還有一個重要的問題需要考慮。
通過Recordset類創建記錄集時,我們能夠以最大的靈活性控制記錄集的處理方式。既然后面兩種方法未能有壓倒性的性能表現,我們主要還是考慮默認返回的游標類型和記錄鎖定方式,對于某些場合來說默認值并不一定是最理想的。
因此,除非由于特殊的原因需要選擇后面兩種方法,否則我們建議考慮下面的規則:
l通過ADODB.Recordset類實例化記錄集,以獲得最好的性能和靈活性。
八、是否應該使用本地記錄集?
ADO允許使用本地(客戶端)記錄集,此時查詢將提取記錄集內的所有數據,查詢完成后連接可以立即關閉,以后使用本地的游標訪問數據,這為釋放連接帶來了方便。使用本地記錄集對于訪問那些要求數據離線使用的遠程數據服務非常重要,那么,對于普通的應用它是否同樣有所幫助?
下面我們加入CursorLocation屬性,并在打開記錄集之后關閉了連接(CLIENT1.asp):
Set objRS = Server.CreateObject("ADODB.Recordset") objRS.CursorLocation = 2 ' adUseClient objRS.ActiveConnection = Application("Conn") objRS.LockType = 1 ' adLockReadOnly objRS.Open Application("SQL") objRS.ActiveConnection = Nothing
理論上,這種方法由于以下兩個原因會對效率有所好處:第一,它避免了在記錄之間移動時重復地通過連接請求數據;第二,由于能夠方便地釋放連接,它減輕了資源需求。然而,從上表看起來使用本地記錄集對提高效率顯然沒有什么幫助。這或許是因為使用本地記錄集時,不管程序設置的是什么,游標總是變成靜態類型。
第6個規則如下:
l除非確實要求記錄集本地化,否則應避免使用。
|