1

我想将输出缓存与 WCF 数据服务一起使用,尽管没有专门内置来支持缓存,但有一个 OnStartProcessingRequest 方法允许我使用普通的 ASP.NET 机制连接并设置请求的可缓存性。

但是我担心如果缓存大量响应,工作进程会由于过多的内存消耗而被回收。有没有办法为 ASP.NET 输出缓存指定上限,以便如果超过此限制,缓存中的项目将被丢弃?

我已经看到了缓存配置设置,但我从文档中得到的印象是,这是通过 Cache 对象进行显式缓存的,因为有一个单独的outputCacheSettings没有与内存相关的属性。

这是Scott Hanselman 帖子中的代码片段,显示了我如何设置请求的可缓存性。

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;
}
4

1 回答 1

2

啊!我现在感觉很蠢……看来我可以在 IIS 的配置中设置这个限制,这是有道理的,因为我猜 IIS 首先是为 ASP.NET 提供输出缓存服务。

作为一个额外的好处,似乎 IIS 已经为此默认了一些合理的设置:

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

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

于 2010-05-17T22:33:39.243 回答