【问题标题】:Store Stream in cache将流存储在缓存中
【发布时间】:2012-09-23 09:05:45
【问题描述】:

我想缓存从 HttpWebRequest 获得的响应。我需要 ResponseStream 和标头。在创建请求时使用HttpRequestCachePolicy(HttpCacheAgeControl.MaxAge, TimeSpan.FromDays(1)) 似乎不起作用(由于某种原因,IsFromCache 永远不会正确),而且我有点害怕手动缓存整个 HttpWebResponse 因为它包含一个压缩数据流,而且我有一个在 ASP.NET 缓存中存储流的感觉很糟糕。

响应被映射到这样的对象(简化):

public readonly Stream Response;
public readonly string Etag;

private MyObject(Stream response, string etag)
{
    this.Response = response;
    this.Etag = etag;
}

由于该对象还包含响应流,我在这里面临同样的问题。

如何缓存这个?

【问题讨论】:

    标签: c# caching


    【解决方案1】:

    Stream管道,而不是 bucket。如果需要存储,必须先获取实际内容。例如,您可以将其全部读入byte[]。例如:

    using(var ms = new MemoryStream()) {
        response.CopyTo(ms);
        byte[] payload = ms.ToArray();
    }
    

    您可以简单地存储byte[]。然后如果你以后想要Stream,你可以使用new MemoryStream(payload)

    【讨论】:

    • +1 我要输入完全相同的内容,您可能想包括如何复制HttpWebRequest.Headers 指向的WebHeaderCollection。此外,他的“容器”结构可以只保存内存流本身,无需复制到数组。
    【解决方案2】:

    您能否创建一个自定义类,其中包含一个用于存储数据的字节数组和另一个带有 HttpWebRequest.Headers 的字段作为标头?然后缓存它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2014-03-24
      • 2021-03-09
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多