在JScript中使用缓存技术的实际代码
2018-09-06 10:30
在使用VBScript时,我们可以用Application缓存数组来实现缓存,例:
程序代码:
复制代码 代码如下:
Dimrs,arr
rs.Openconn,sql,1,1
arr=rs.GetRows()
Application.Lock()
Application(cache)=arr
Applicatoin.UnLock()
在VBScript里,数组是可以存到Application对象里的,但是如果ASP的语言选择为JScript的话,那么就有些不妙了,我们在使用Application储存一个数组时,会出现以下错误:
引用内容:
Applicationobject,ASP0197(0x80004005)
Disallowedobjectuse
Cannotaddobjectwithapartmentmodelbehaviortotheapplicationintrinsicobject.
在微软的知识库可以找到具体原因如下:
引用内容:
JScriptarraysareconsideredtobeApartmentCOMcomponents.OnlyComponentObjectModel(COM)componentsthataggregatetheFreeThreadedMarshaler(FTM)canbeassignedtoApplicationscopewithinanInternetInformationServer(IIS)5.0ASPpage.BecauseanApartmentcomponentcannotaggregatetheFTM(itcannotallowadirectpointertobepassedtoitsclients,unlikeaBothwithFTMobject),JScriptarraysdonotaggregatetheFTM.Therefore,JScriptarrayscannotbeassignedtoApplicationscopefromanASPpage.
以上描述引用自:PRB:ErrorWhenYouStoreaJScriptArrayinApplicationScopeinIIS5.0
因此,为了解决这个问题,在Google里找了一大会,终于找到了一篇文章《Application对象的Contents和StaticObjects做Cache的一些结论》,解决了这个问题,方法就是使用Application.StaticObject存放一个Scripting.Dictionary对象,然后再使用Scripting.Dictionary对象来存放需要缓存的数据。
据此,写了一个操作缓存的类,实现put、get、remove和clear方法,使用之前,需要在global.asa中添加一个object:
程序代码:
<objectid=xbsCacherunat=serverscope=Applicationprogid=Scripting.Dictionary></object>
类的实现如下:
复制代码 代码如下:
<scriptlanguage=JScriptrunat=server>
/**
Title:cacheoperateclass
Description:operatesystemcache
@Copyright:Copyright(c)2007
@Author:xujiwei
@Website:
@Version:1.0
@Time:2007-06-2912:03:45
**/
varxbsCache={
get:function(key){
returnApplication.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时的缓存实现。
上一篇:支持加号空格的查询