我想在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;
}
答案 0 :(得分:1)
啊!我现在感到愚蠢......似乎我可以设置这个限制in IIS's configuration,这是有道理的,因为我想IIS首先向ASP.NET提供输出缓存服务。
作为一个额外的奖励,似乎IIS已经违约了一些合理的设置:
最大缓存响应大小(以字节为单位)指定的最大大小 两者的缓存响应 用户模式和内核模式缓存。该 默认值为262144字节。这个 字段在服务器级别启用 只要;它是所有其他的只读 水平。
缓存大小限制(以MB为单位)配置两者的大小限制 用户模式和内核模式缓存。您 可以键入大小(以MB为单位)或键入0.如果 你键入0,IIS使用一半 可用物理内存或虚拟内存 记忆,以较少者为准。这个领域 仅在服务器级别启用; 它在所有其他级别都是只读的。