綱要:ASP動態產生的內容以什麼方式輸出效率最高?最好用哪種方法提取資料庫記錄集?本文測試了近20個這類ASP開發中常見的問題,測試載入器所顯示的時間告訴我們:這些通常可以想當然的問題不僅值得關注,而且還有出乎意料的秘密隱藏在內。
一、測試目的
本文的第一部分考察了ASP開發中的一些基本問題,給出了一些效能測試結果以協助讀者理解放入頁面的代碼到底對效能有什麼影響。ADO是由Microsoft開發的一個通用、易用的資料庫介面,事實證明通過ADO與資料庫互動是ASP最重要的應用之一,在第二部分中,我們就來研究這個問題。
ADO所提供的功能相當廣泛,因此準備本文最大的困難在於如何界定問題的範圍。考慮到提取大量的資料可能顯著地增加Web伺服器的負載,所以我們決定這一部分的主要目的是找出什麼才是操作ADO記錄集的最優配置。然而,即使縮小了問題的範圍,我們仍舊面臨很大的困難,因為ADO可以有許多種不同的方法來完成同一個任務。例如,記錄集不僅可以通過Recordset類提取,而且也可以通過Connection和Command類提取;即使得到記錄集對象之後,還有許多可能戲劇性地影響效能的操作方法。然而,與第一部分一樣,我們將儘可能地涵蓋最廣泛的問題。
具體地講,這一部分的目標是收集足夠多的資訊,回答下列問題:
l 是否應該通過包含引用ADOVBS.inc?
l 使用記錄集時是否應該建立單獨的連線物件?
l 最好用哪種方法提取記錄集?
l 哪種遊標類型和記錄鎖定方式效率最高?
l 是否應該使用本地記錄集?
l 設定記錄集屬性用哪種方法最好?
l 用哪種方法引用記錄集欄位值效率最高?
l 用臨時字串收集輸出是一種好方法嗎?
二、測試環境
本測試總共用到了21個ASP檔案,這些檔案可以從本文後面下載。每一個版面設定成可以運行三種不同的查詢,分別返回0、25、250個記錄。這將協助我們隔離頁面本身的初始化、運行開銷與用逐一查看記錄集的開銷。
為便於測試,資料庫連接字串和SQL命令串都在Global.asa中作為Application變數儲存。由於我們的測試資料庫是SQL Server 7.0,因此串連串指定OLEDB作為串連提供者,測試資料來自SQL Server的Northwind資料庫。SQL SELECT命令從NorthWind Orders表提取7個指定的欄位。