网站制作学习网ASP→正文:微软建议的ASP性能优化2
字体:

微软建议的ASP性能优化2

ASP 2008/1/14 8:15:07  点击:不统计

GetEmploymentStatusList = d

End Function

%>



可以为所需要的每个数据块编写类似的函数。



应以什么格式存储数据?可以存储任何变体类型,因为所有脚本变量都是变体型。例如,您可以存储字符串、整数或数组。通常,您将以这些变量类型之一存储 ADO 记录集的内容。要从 ADO 记录集获取数据,您可以手工将数据复制到 VBScript 变量,一次一个字段。使用一个 ADO 记录集持久函数 GetRows()、GetString() 或 Save()(ADO 2.5),可加快速度且更容易一些。其详细情况已超出本文所讨论的范围,但下面给出了一个函数举例,说明使用 GetRows() 返回记录集数据的一个数组:



' Get Recordset, return as an Array

Function FetchEmploymentStatusList

Dim rs

Set rs = CreateObject(“ADODB.Recordset”)

rs.Open “select StatusName, StatusID from EmployeeStatus”, _

“dsn=employees;uid=sa;pwd=;”

FetchEmploymentStatusList = rs.GetRows() “ Return data as an Array

rs.Close

Set rs = Nothing

End Function



对上面举例做更进一步改进,可以将 HTML 缓存为列表,而不是数组。下面是简单的示例:



' Get Recordset, return as HTML Option list

Function FetchEmploymentStatusList

Dim rs, fldName, s

Set rs = CreateObject(“ADODB.Recordset”)

rs.Open “select StatusName, StatusID from EmployeeStatus”, _

“dsn=employees;uid=sa;pwd=;”

s = “<select name=““EmploymentStatus”“>“ & vbCrLf

Set fldName = rs.Fields(“StatusName”) ' ADO Field Binding

Do Until rs.EOF

' Next line violates Don't Do String Concats,

' but it's OK because we are building a cache

s = s & “ <option>“ & fldName & “</option>“ & vbCrLf

rs.MoveNext

Loop







s = s & “</select>“ & vbCrLf

rs.Close

Set rs = Nothing ' See Release Early

FetchEmploymentStatusList = s ' Return data as a String

End Function



在适当的条件下,可以将 ADO 记录集本身缓存在 Application 或 Session 作用域中。有两个警告:



必须将 ADO 标记为自由线程

必须使用断开连接的记录集。

如果不能保证满足这两个要求,则不要缓存 ADO 记录集。在下面的“非敏捷组件”和“不要缓存连接”技巧中,我们将讨论将 COM 对象存储在 Application 或 Session 作用域中的危险性。



当您将数据存储在 Application 或 Session 作用域时,数据将保留在那里,直到您以编程方式改变它、Session 过期或 Web 应用程序重新启动为止。如果数据需要更新怎么办?要手工强制对 Application 数据进行更新,您可以访问只有管理员才可访问的 ASP 页来更新数据。或者,您可以通过函数定期自动刷新数据。下面例子存储带有缓存数据的时间戳,并隔一段时间后刷新数据。



<%

' error handing not shown...

Const UPDATE_INTERVAL = 300 ' Refresh interval, in seconds



' Function to return the employment status list

Function GetEmploymentStatusList

UpdateEmploymentStatus

GetEmploymentStatusList = Application(“EmploymentStatusList”)

End Function



' Periodically update the cached data

Sub UpdateEmploymentStatusList

Dim d, strLastUpdate

strLastUpdate = Application(“LastUpdate”)

If (strLastUpdate = ““) Or _

(UPDATE_INTERVAL < DateDiff(“s”, strLastUpdate, Now)) Then



' Note: two or more calls might get in here. This is okay and will simply

' result in a few unnecessary fetches (there is a workaround for this)



' FetchEmploymentStatusList function (not shown)

·上一篇:微软建议的ASP性能优化1 >>    ·下一篇:微软建议的ASP性能优化4 >>
推荐文章
最新文章