代码之家  ›  专栏  ›  技术社区  ›  Josh

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

  •  1
  • Josh  · 技术社区  · 16 年前

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

    但是,我担心如果缓存大量响应,那么由于内存消耗过多,工作进程将被回收。是否可以指定ASP.NET输出缓存的上限,以便在超过此限制时丢弃缓存中的项?

    我见过 caching 配置设置,但我从文档中得到的印象是,这是为了通过缓存对象进行显式缓存,因为有一个单独的 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 回复  |  直到 16 年前
        1
  •  1
  •   Josh    16 年前

    啊!我现在觉得很笨…看来我可以设定这个限度 in IIS's configuration 这是有意义的,因为我猜IIS首先向ASP.NET提供输出缓存服务。

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

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

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