改进性能和样式的 24个 ASP 技巧第1/2页(4)



在正常的情况下,可以在 Application 或 Session 作用域中缓存 ADO 记录集本身。有两个警告: 

ADO 必须为标记的自由线程 
必须使用断开连接的记录集。 
如果不能保证满足这两个要求,请不要缓存 ADO 记录集。在下面的非灵活组件和不要缓存连接技巧中,我们将讨论在 Application 或 Session 作用域中存储 COM 对象的危险。 

如果在 Application 或 Session 作用域中存储数据,这些数据将一直保留在那儿,直到在程序中改变它、Session 过期或 Web 应用程序重新启动时为止。数据需要更新如何处理?若要用手工强制更新应用程序数据,可以调用只允许管理员访问的数据更新 ASP 页。另外,还可以通过函数,周期地自动刷新数据。下面的示例存储带缓存数据的时间戳,在指定时间间隔后刷新数据。 

<% 
' 未显示错误处理... 
Const update_INTERVAL = 300 ' 刷新时间间隔,以秒计 

' 函数返回雇佣状态列表 
Function GetEmploymentStatusList 
updateEmploymentStatus 
GetEmploymentStatusList = Application("EmploymentStatusList") 
End Function 

' 定期更新缓存的数据 
Sub updateEmploymentStatusList 
Dim d, strLastupdate 
strLastupdate = Application("Lastupdate") 
If (strLastupdate = "") Or _ 
(update_INTERVAL DateDiff("s", strLastupdate, Now)) Then 

' 注意:此处可能有两个或多个调用。这是可以的,只不过 
' 产生几个不必要的取指令罢了(就此有一个工作区) 

' FetchEmploymentStatusList 函数(不显示) 
' 从 DB 中取数据,返回一个数组 
d = FetchEmploymentStatusList() 

' 更新 Application 对象。用 Application.Lock() 
' 来确保一致的数据 
Application.Lock 
Application("EmploymentStatusList") = d 
Application("Lastupdate") = CStr(Now) 
Application.Unlock 
End If 
End Sub 

其他示例,请参阅具有 Application 数据的最快列表框(英文)。 

请注意,在 Session 或 Application 对象中缓存大型数组并非上策。在访问数组元素之前,脚本语言的语法要求建立整个数组的临时副本。例如,如果在 Application 对象中缓存了将美国邮政编码映射到本地气象站的字符串数组,该字符串数组有 100,000 个元素,ASP 在找出一个字符串之前,必须将所有 100,000 个气象站复制到临时数组中。在这种情况下,建立带自定义方法的自定义组件,来存储气象站 - 或使用一个字典组件,也许更好。 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3512.html