控制ASP.NET输出缓存内存使用情况

时间:2010-05-17 21:54:14

标签: asp.net caching outputcache wcf-data-services odata

我想在WCF数据服务中使用输出缓存,虽然没有专门用于支持缓存的内容,但是有一个OnStartProcessingRequest方法允许我使用普通的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 个答案:

答案 0 :(得分:1)

啊!我现在感到愚蠢......似乎我可以设置这个限制in IIS's configuration,这是有道理的,因为我想IIS首先向ASP.NET提供输出缓存服务。

作为一个额外的奖励,似乎IIS已经违约了一些合理的设置:

  

最大缓存响应大小(以字节为单位)指定的最大大小   两者的缓存响应   用户模式和内核模式缓存。该   默认值为262144字节。这个   字段在服务器级别启用   只要;它是所有其他的只读   水平。

     

缓存大小限制(以MB为单位)配置两者的大小限制   用户模式和内核模式缓存。您   可以键入大小(以MB为单位)或键入0.如果   你键入0,IIS使用一半   可用物理内存或虚拟内存   记忆,以较少者为准。这个领域   仅在服务器级别启用;   它在所有其他级别都是只读的。