在編寫ASP程序時,為了提高ASP程序的效率,減少對數據庫的連接和查詢,通常採用緩存技術來緩存一些需要從數據庫中讀取的數據,接下來錯新技術頻道帶你一起來看看吧!
例:
程序代碼:
複製代碼代碼如下: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時的緩存實現,希望錯新技術頻道小編為您整理的內容,可以為大家提供到幫助。