Asp classic 在application()对象中存储字典对象数组-经典ASP

Asp classic 在application()对象中存储字典对象数组-经典ASP,asp-classic,Asp Classic,使用经典ASP,有人知道将字典对象数组放入应用程序对象中是否可行或可取吗?我试过了,但在大约50000次点击下面的脚本后,应用程序池被破坏,或者在运行这行时生成了一些可捕获的C000005错误:dictLanguage=applicationlanguage 不过几天内效果不错。这是否与我将应用程序对象分配给另一个变量的方式有关,我以为它会传递指针而不是副本?有比我聪明的人知道这里发生了什么吗 if isempty(Application("lang")) then ''# calle

使用经典ASP,有人知道将字典对象数组放入应用程序对象中是否可行或可取吗?我试过了,但在大约50000次点击下面的脚本后,应用程序池被破坏,或者在运行这行时生成了一些可捕获的C000005错误:dictLanguage=applicationlanguage

不过几天内效果不错。这是否与我将应用程序对象分配给另一个变量的方式有关,我以为它会传递指针而不是副本?有比我聪明的人知道这里发生了什么吗

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

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


要了解更多信息,请访问url

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


要了解更多信息,请访问url

一个随时可用并支持存储在应用程序对象中的对象具有ProgID MSXML2.FreeThreadedDOMDocument.3.0


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

一个随时可用并支持存储在应用程序对象中的对象具有ProgID MSXML2.FreeThreadedDOMDocument.3.0


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

我会在数据库或文件中放入这么大的内容。它已经存在于数据库中。我试图在应用程序对象中缓存数据以提高速度。在每个页面上重新查询我们的数据库会降低性能。然后我会使用。GetRows@AnthonyWJones您还可以通过在代码上添加经过长期实验学习的内容来美化代码。David-您可以在应用程序级别存储原始数据字符串或普通数组,然后在每次请求的运行时将它们解析到字典中-应该不会太复杂,如果需要帮助,请告诉我。我会将这么大的内容放入数据库或文件中。它已经存在于数据库中。我试图在应用程序对象中缓存数据以提高速度。在每个页面上重新查询我们的数据库会降低性能。然后我会使用。GetRows@AnthonyWJones您还可以通过在代码上添加经过长期实验学习的内容来美化代码。David-您可以在应用程序级别存储原始数据字符串或普通数组,然后在每个请求的运行时将它们解析到字典中-应该不会太复杂,如果需要帮助,请告诉我。谢谢,看起来该URL中的链接都已失效,但这肯定是问题的答案。谢谢,看起来该URL中的链接都已失效,但这肯定是问题的答案。