2010-05-17 69 views
1

我想使用輸出緩存與WCF數據服務,雖然沒有什麼特別的內置來支持緩存,但有一個OnStartProcessingRequest方法允許我掛鉤並設置緩存的請求使用正常的ASP.NET機制。控制ASP.NET輸出緩存內存使用

但是我擔心工作進程會因爲內存消耗過多而被循環使用,如果大量響應被緩存的話。有沒有辦法指定ASP.NET輸出緩存的上限,以便如果超過此限制,緩存中的項目將被丟棄?

我已經看過caching的配置設置,但我從文檔中得到了這樣的印象,即通過Cache對象進行顯式緩存,因爲有一個單獨的outputCacheSettings,它沒有與內存相關的屬性。

這是Scott Hanselman's post的代碼片段,它顯示了我如何設置請求的緩存能力。

protected override void OnStartProcessingRequest(ProcessRequestArgs args) 
{ 
    base.OnStartProcessingRequest(args); 
    //Cache for a minute based on querystring 
    HttpContext context = HttpContext.Current; 
    HttpCachePolicy c = HttpContext.Current.Response.Cache; 
    c.SetCacheability(HttpCacheability.ServerAndPrivate); 
    c.SetExpires(HttpContext.Current.Timestamp.AddSeconds(60)); 
    c.VaryByHeaders["Accept"] = true; 
    c.VaryByHeaders["Accept-Charset"] = true; 
    c.VaryByHeaders["Accept-Encoding"] = true; 
    c.VaryByParams["*"] = true; 
} 

回答

1

啊!我現在覺得很笨...看來我可以設置這個限制in IIS's configuration,這是有道理的,因爲我猜IIS首先向ASP.NET提供輸出緩存服務。

而作爲一個額外的好處,似乎IIS已經默認爲一些合理的設置是:

最大緩存響應大小(以字節爲單位)指定的 的最大大小兩個緩存響應 用戶模式和內核模式緩存。 的默認值是262144字節。此 字段僅在服務器級別 處啓用;它在所有其他 級別是隻讀的。

緩存大小限制(以MB爲單位)配置 用戶模式和內核模式緩存的大小限制。您可以鍵入大小(以MB爲單位)或鍵入0.如果 鍵入0,則IIS使用可用物理內存的一半或虛擬內存的較少者。該字段 僅在服務器級別啓用; 它在所有其他級別都是隻讀的。