首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

ASP 資料存取效能優化:連線池、OLEDB、儘早釋放、單一連線多 Recordset

     編輯:關於SqlServer

核心原則

資料存取時間遠超過 ASP 解釋時間,優化重點在連線管理與資料檢索。

1. 使用 OLEDB 連線字串 (非 DSN)

strConn = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=pubs;UID=sa;PWD=;OLE DB Services=-1"

OLE DB Services=-1 啟用連線池與自動交易登記。

2. 盡早釋放物件 (關鍵)

錯誤模式:一次開啟多個 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() 取字串,斷開連線後再處理。

3. 建立單一 Connection 供多 Recordset 使用

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 條)。

4. 多資料庫連線策略

錯誤:單一 Connection 切換 Initial Catalog 或用三部分命名 db..table → 不使用連線池,每次重新認證。

正確:每個資料庫獨立 Connection 物件,各自進入連線池。

5. Disconnected Recordset 斷開連線

Set rs.ActiveConnection = Nothing  ' 釋放連線回池,Recordset 變為離線模式
' 繼續操作 rs (篩選、排序、存檔 XML)

測試工具

Microsoft WAST (Web Application Stress Tool) 模擬併發點擊,監控效能計數器 SQLServer:User Connections / ASP.NET Requests Queued。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved