綱要: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個指定的字段。
< SCRIPT LANGUAGE=VBScript RUNAT=Server >
Sub Application_OnStart
Application("Conn") = "Provider=SQLOLEDB; " & _
"Server=MyServer; " & _
"uid=sa; " & _
"pwd=;" & _
"DATABASE=northwind"
Application("SQL") = "SELECTTOP 0OrderID, " & _
"CustomerID, " & _
"EmployeeID, " & _
"OrderDate, " & _
"RequiredDate, " & _
"ShippedDate, " & _
"Freight " & _
"FROM[Orders] "
End Sub
< /SCRIPT >
'alternate sql - 25 records
Application("SQL") = "SELECTTOP 25OrderID, " & _
"CustomerID, " & _
"EmployeeID, " & _
"OrderDate, " & _
"RequiredDate, " & _
"ShippedDate, " & _
"Freight " & _
"FROM[Orders] "
'alternate sql - 250 records
Application("SQL") = "SELECTTOP 250 OrderID, " & _
"CustomerID, " & _
"EmployeeID, " & _
"OrderDate, " & _
"RequiredDate, " & _
"ShippedDate, " & _
"Freight " & _
"FROM[Orders] "
測試服務器配置如下:450 Mhz Pentium,512 MB RAM,NT Server 4.0 SP5,MDAC 2.1(數據訪問組件),以及5.0版本的Microsoft腳本引擎。SQL Server運行在另外一臺具有類似配置的機器上。和第一部分一樣,我們仍舊使用Microsoft Web Application Stress Tool 記錄從第一個頁面請求到從服務器接收到最后一個字節的時間(TTLB,Time To Last Byte),時間以毫秒為單位。測試腳本調用每個頁面1300次以上,運行時間約20小時,以下顯示的時間是會話的平均TTLB。請記住,和第一部分一樣,我們只關心代碼的效率,而不是它的可伸縮性或服務器性能。
同時請注意我們啟用了服務器的緩沖。另外,為了讓所有的文件名字長度相同,有的文件名字中嵌入了一個或多個下劃線。
三、第一次測試
文章來源于領測軟件測試網 http://www.kjueaiud.com/