title: Storing an array of dictionary objects in an application() object - Classic ASP
body: <p>Using Classic ASP, does anyone know if it is possible (or advisable) to put an array of dictionary objects into an Application Object?  I tried but after about 50,000 or so hits to the script below the App Pool gets corrupted or something and "trappable" C0000005 errors get generated when this line is run: dictLanguage=Application("lang")</p>
  
  <p>Works fine for a few days though.  Is it something to do with the way I've assigned the application object to another variable, I thought it would pass a pointer not a copy?  Anyone smarter than me know what's going on here?</p>
  
  <pre><code>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
  </code></pre>