在application()对象中存储字典对象数组 - Classic ASP

时间:2012-02-19 00:28:07

标签: asp-classic

使用经典ASP,是否有人知道是否可以(或建议)将字典对象数组放入应用程序对象?我尝试了但是在大约50,000次左右的点击下面的应用程序池中的脚本被损坏或者什么东西和“可陷阱”C0000005错误在这一行运行时生成:dictLanguage = Application(“lang”)

虽然工作正常几天。是否与我将应用程序对象分配给另一个变量的方式有关,我认为它会传递指针而不是副本?比我聪明的人都知道这里发生了什么?

if isempty(Application("lang")) then 
    ''# called when first visitor hits the page (following server reboot or app pool recycle)
    init()
    dictLanguage=Application("lang")
else
    ''# called for all other page hits
    dictLanguage=Application("lang") ''# ***** TRAPPABLE ERROR after a few thousand page views *******
end if


''# // fill the application object with an array containing 10 dictionary objects, each holding a different language.
''# // This function appears to run just fine.

function init

    Set initcn = Server.CreateObject("ADODB.Connection")
    initcn.Open dbConStr
    strSQL = "SELECT languageNo,quickRef,text FROM tblTranslation"
    Set rs = initcn.Execute(strSQL) 

    dim d(10)   

    Set d(1)=Server.CreateObject("Scripting.Dictionary")
    Set d(2)=Server.CreateObject("Scripting.Dictionary")
    Set d(3)=Server.CreateObject("Scripting.Dictionary")
    Set d(4)=Server.CreateObject("Scripting.Dictionary")
    Set d(5)=Server.CreateObject("Scripting.Dictionary")
    Set d(6)=Server.CreateObject("Scripting.Dictionary")
    Set d(7)=Server.CreateObject("Scripting.Dictionary")
    Set d(8)=Server.CreateObject("Scripting.Dictionary")
    Set d(9)=Server.CreateObject("Scripting.Dictionary")
    Set d(10)=Server.CreateObject("Scripting.Dictionary")

    while not rs.eof
        a=rs("languageNo")
        b=rs("quickRef")
        c=rs("text")
        ''# on error resume next
        d(a).Add b,c    
        rs.movenext
    wend

    initcn.close

    ''# Storing the array in the Application object
    Application.Lock
    Application("lang") = d
    Application.Unlock

end function

2 个答案:

答案 0 :(得分:3)

一个现成的并且支持存储在应用程序对象中的对象具有ProgID“MSXML2.FreeThreadedDOMDocument.3.0”

这是加载相当静态的应用程序范围数据的一个非常好的解决方案,如果您使用SQL Server,那么SQL Server FOR XML功能可以很容易地构建一些XML以加载到DOM中。

答案 1 :(得分:2)

由于其线程模型,您不应将Dictionary对象用作应用程序级变量。如果你需要在应用程序级别使用类似字典的对象,请使用Microsoft的免费查找组件(或Caprock Consulting的免费字典组件)。

要了解详情,请访问this网址。