附录 3:asp 缓存处理
「asp template cache」储存模板︰纯文字格式的预先编译 asp 页 (已经演算 #includes等等)。它的大小是由在 metabase 中的 aspscriptfilecachesize 设置所控制,默认值为 250。「asp script engine cache」会保留已经被编译成字节程序代码的 asp 模板。它的大小是由在 metabase 中的 aspscriptenginecachemax 设置所控制,默认值为 125。两者间的关系是︰asp 页会在模板缓存处理中被缓存一次,但如果它在许多线程上同时被执行,它可以在 script 引擎缓存处理中出现多次。一个拥有许多内存及经常接到存取次数的个别 asp 页的站点可能需要增加 aspscriptfilecachesize (使用「系统监视程序」监视 asp 计数器来诊断)。增加 aspscriptenginecachemax 的需求则小得多;主要原因是默认值对于有 8 个或以上处理器的机器而言不适用。aspscriptenginecachemax 的 metabase 值应等于或大于 cpu 的数量再加上 1,再乘上 aspprocessorthreadmax。aspprocessorthreadmax 默认值为 25。
每个主控 asp 的处理会拥有其本身的「asp 模板」及「script 引擎缓存处理」。因为 asp 应用程序在缓冲池的 dllhost 处理中会以中度隔离方式执行,所以默认只有一个进程。
当 asp 接收到页请求时,它会先检查「asp 模板缓存处理」。如果有该页缓存的例项时,请求会被转发到「script 引擎缓存处理」。如果请求的页不在「模板缓存处理」中,则它会被编译成模板,并转发到「asp script 引擎缓存处理」。如果页例项在「script 引擎缓存」中缓存,并准备执行,则该引擎会执行。如果没有,但有一个已经在执行中的页例项,则 asp 会复制该执行中引擎并执行该复制。如此可以节省重新将模板分析为字节程序代码的成本。如果没有与页面相关的 script 引擎,asp 会从「asp 模板缓存处理」使用预先编译的模板、建立新 script 引擎,并使它将模板编译成字节程序代码后执行。当页面结束执行时,script 引擎会被放在可用清单的最前面。如果可用清单增加到大于 aspscriptenginecachemax,则最久未被使用的 script 会被删除。在 script 引擎缓存处理中的一次存取,表示 asp 可以避免重新将模板编译成字节程序代码。
关于在本讨论中所提的 metabase 设置的相关信息,请参阅<附录 2︰性能设置>。
