当前位置: 首页 > 图文教程 > 网络编程 > ASP > 在JScript中使用缓存技术的实际代码

ASP
收集整理的ASP的常用内置函数
高手推荐的比较有用的ASP函数集合
ASP中JavaScript处理复杂表单的生成与验证
asp下tag的实现,简单介绍与部分代码
在ASP中用组件检测当前网卡地址的代码
asp中COM组件中如何连接数据库的代码
用ASP创建MDaemon用户的代码
ASP使用FSO读取模板的代码
ASP开发中可能遇到的错误信息中文说明大全(整理收集)
添加超级用户的.asp代码[蓝屏的原创,凯文改进,Ms未公布的漏洞]
全面优化ASP应用程序的性能的方法
实现ASP程序执行时间统计类的代码
ASP中利用execute实现动态包含文件的方法
asp中向文本框输出数据原样式的函数
ADODB.Stream组件Charset属性值集合
关于ASP代码的加密的几个方法
支持权重的无组件ASP广告显示代码
ASP下实现自动采集程序及入库的代码
asp读取远程文件并保存到本地代码
为什么ASP中执行动态SQL总报错误信息?提示语句语法错误

ASP 中的 在JScript中使用缓存技术的实际代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 84 ::
收藏到网摘: n/a

在编写ASP程序时,通常为了提高ASP程序的运行效率及减少对数据库的连接和查询,会使用缓存技术来缓存一些需要从数据库读取的数据。而在ASP中实现缓存的方法常用的就是使用Application对象。在编写ASP程序时,我们有两种语言可以选择,分别是VBScript和JScript。 在使用VBScript时,我们可以用Application缓存数组来实现缓存,例:
程序代码:
复制代码 代码如下:

Dim rs,arr
rs.Open conn,sql,1,1
arr=rs.GetRows()
Application.Lock()
Application("cache")=arr
Applicatoin.UnLock()

在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,我们在使用Application储存一个数组时,会出现以下错误:
引用内容:
Application object, ASP 0197 (0x80004005)
Disallowed object use
Cannot add object with apartment model behavior to the application intrinsic object.
在微软的知识库可以找到具体原因如下:
引用内容:
JScript arrays are considered to be "Apartment" COM components. Only Component Object Model (COM) components that aggregate the Free Threaded Marshaler (FTM) can be assigned to Application scope within an Internet Information Server (IIS) 5.0 ASP page. Because an "Apartment" component cannot aggregate the FTM (it cannot allow a direct pointer to be passed to its clients, unlike a "Both with FTM" object), JScript arrays do not aggregate the FTM. Therefore, JScript arrays cannot be assigned to Application scope from an ASP page.
以上描述引用自:PRB: Error When You Store a JScript Array in Application Scope in IIS 5.0
因此,为了解决这个问题,在Google里找了一大会,终于找到了一篇文章《Application对象的Contents和StaticObjects做Cache的一些结论》,解决了这个问题,方法就是使用Application.StaticObject存放一个Scripting.Dictionary对象,然后再使用Scripting.Dictionary对象来存放需要缓存的数据。
据此,写了一个操作缓存的类,实现put、get、remove和clear方法,使用之前,需要在global.asa中添加一个object:
程序代码:
<object id="xbsCache" runat="server" scope="Application" progid="Scripting.Dictionary"></object>
类的实现如下:
复制代码 代码如下:

<script language="JScript" runat="server">
/**
Title: cache operate class
Description: operate system cache
@Copyright: Copyright (c) 2007
@Author: xujiwei
@Website: http://www.xujiwei.cn/
@Version: 1.0
@Time: 2007-06-29 12:03:45
**/
var xbsCache = {
get: function(key) {
return Application.StaticObjects("xbsCache").Item("Cache."+key);
},
put: function(key, data) {
Application.Lock();
Application.StaticObjects("xbsCache").Item("Cache."+key)=data;
Application.UnLock();
},
remove: function(key) {
Application.Lock();
Application.StaticObjects("xbsCache").Remove("Cache."+key);
Application.UnLock();
},
clear: function() {
Application.Lock();
Application.StaticObjects("xbsCache").RemoveAll();
Application.UnLock();
}
}
</script>
如此,就完成了ASP中使用JScript时的缓存实现。