資料存取時間遠超過 ASP 解釋時間,優化重點在連線管理與資料檢索。
strConn = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=pubs;UID=sa;PWD=;OLE DB Services=-1"
OLE DB Services=-1 啟用連線池與自動交易登記。
錯誤模式:一次開啟多個 Recordset,最後才關閉 → 佔用連線池槽位、記憶體。
' 錯誤
rs1.Open sql1, cnn: rs2.Open sql2, cnn: rs3.Open sql3, cnn
' 處理 rs1, rs2, rs3
rs1.Close: rs2.Close: rs3.Close
正確模式:開一個 → 處理 → 關閉 → 下一個。
' 正確
rs.Open sql1, cnn: '處理 rs1: rs.Close
rs.Open sql2, cnn: '處理 rs2: rs.Close
rs.Open sql3, cnn: '處理 rs3: rs.Close
若後續處理需前者資料,用 GetRows() 取陣列或 GetString() 取字串,斷開連線後再處理。
Set cnn = Server.CreateObject("ADODB.Connection")
cnn.Open strConn
Set rs1 = Server.CreateObject("ADODB.Recordset"): rs1.Open sql1, cnn
Set rs2 = Server.CreateObject("ADODB.Recordset"): rs2.Open sql2, cnn
' ...
rs1.Close: rs2.Close: cnn.Close
避免每個 Recordset 隱式建立連線 (測試證實:迴圈 20 次直接 rs.Open sql, strConn 產生 20 條連線;共用 Connection 僅 2 條)。
錯誤:單一 Connection 切換 Initial Catalog 或用三部分命名 db..table → 不使用連線池,每次重新認證。
正確:每個資料庫獨立 Connection 物件,各自進入連線池。
Set rs.ActiveConnection = Nothing ' 釋放連線回池,Recordset 變為離線模式
' 繼續操作 rs (篩選、排序、存檔 XML)
Microsoft WAST (Web Application Stress Tool) 模擬併發點擊,監控效能計數器 SQLServer:User Connections / ASP.NET Requests Queued。