日期:2009-06-27  浏览次数:20750 次

附录 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︰性能设置>。