附錄 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︰性能設置>。
|