【问题标题】:Controlling ASP.NET output cache memory usage控制 ASP.NET 输出缓存内存使用
【发布时间】:2011-02-20 15:23:16
【问题描述】:

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

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

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

这是来自Scott Hanselman's post 的代码 sn-p,它显示了我如何设置请求的可缓存性。

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

【问题讨论】:

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


    【解决方案1】:

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

    另外,IIS 似乎已经为此默认了一些合理的设置:

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-22
      • 1970-01-01
      • 2010-10-08
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-05
      相关资源
      最近更新 更多