但是,這一技術有幾個問題。如果應用程序域卸載,該計時器實例將停止觸發其事件。另外,因為 CLR 對于每個進程的線程數量具有一個硬性標準,所以可能會出現這樣的情形:服務器負載很重,其中計時器可能沒有可在其基礎上得以完成的線程,在某種程度上可能會造成延遲。ASP.NET 通過在進程中保留一定數量的可用線程,并且僅使用總線程的一部分用于請求處理,試圖將上述情況發生的機會降到最低。但是,如果您具有很多異步操作時,這可能就是一個問題了。
這里沒有足夠的空間來放置該代碼,但是您可以下載一個可以看懂的示例,網址是 www.rob-howard.net。請了解一下 Blackbelt TechEd 2004 演示中的幻燈片和演示。
技巧 7 — 頁輸出緩存和代理服務器
ASP.NET 是您的表示層(或者說應該是您的表示層);它由頁、用戶控件、服務器控件(HttpHandlers 和 HttpModules)以及它們生成的內容組成。如果您具有一個 ASP.NET 頁,它會生成輸出(HTML、XML、圖像或任何其他數據),并且您針對每個請求運行此代碼時,它都會生成相同的輸出,那么您就擁有一個可用于頁輸出緩存的絕佳備選內容。
將此行內容添加頁的最上端
<%@ Page OutputCache VaryByParams="none" Duration="60" %>
就可以高效地為此頁生成一次輸出,然后對它進行多次重用,時間最長為 60 秒,此時該頁將重新執行,輸出也將再一次添加到 ASP.NET 緩存。通過使用一些低級程序化 API 也可以完成此行為。對于輸出緩存有幾個可配置的設置,如剛剛講到的 VaryByParams 屬性。VaryByParams 剛好被請求到,但還允許您指定 HTTP GET 或 HTTP POST 參數來更改緩存項。例如,只需設置 VaryByParam="Report" 即可對 default.aspx?Report=1 或 default.aspx?Report=2 進行輸出緩存。通過指定一個以分號分隔的列表,還可以指定其他參數。
很多人都不知道何時使用輸出緩存,ASP.NET 頁還會生成一些位于緩存服務器下游的 HTTP 標頭,如 Microsoft Internet Security and Acceleration Server 或 Akamai 使用的標頭。設置了 HTTP 緩存標頭之后,可以在這些網絡資源上對文檔進行緩存,客戶端請求也可在不必返回原始服務器的情況下得以滿足。
因此,使用頁輸出緩存不會使得您的應用程序效率更高,但是它可能會減少服務器上的負載,因為下游緩存技術會緩存文檔。當然,這可能只是匿名內容;一旦它成為下游之后,您就再也不會看到這些請求,并且再也無法執行身份驗證以阻止對它的訪問了。
文章來源于領測軟件測試網 http://www.kjueaiud.com/