1

我刚刚发现System.Web.Caching.Cache在我正在从事的一个项目中使用,我很难找到更多关于它的信息。

我的问题是这个缓存是如何持久化的?是客户端(类似于ViewState),服务器端(Session)?完全不同?

例子:

protected string FileContent 
{ 
    get 
    { 
        return Cache[FILE_UPLOAD_KEY + Id] as string ?? GetFileUpload(); 
    } 
}
4

2 回答 2

5

它是一个服务器端、应用程序范围的缓存。

每个应用程序域创建一个此类的实例,只要应用程序域保持活动状态,它就保持有效。有关此类实例的信息可通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性获得。(缓存类,MSDN

它授予对缓存对象设置时间限制等的能力。而且它不保证当你再次需要它时该对象会在那里。只要有足够的内存,它就会将项目保存在缓存中。

因此,它不适用于在页面视图(使用ViewStateSession)或控件(使用Items )之间传递对象。它旨在缓存构建成本高昂的全局对象(可在所有客户端的任何请求中访问)。

于 2013-04-02T14:52:13.100 回答
2

它在服务器上持续存在,并且跨会话是全局的,例如Application. 因此,当您在 中设置值时Cache,所有用户都可以使用它,直到它过期。

编辑

您得到的示例可能不太正确(除非GetFileUpload()实际写入缓存)。通常,您对缓存的调用类似于:

string GetSomeStringFromCache()
{
    string someString = Cache[SomeKey] as string;
    if (someString == null)
    {
        someString = GetStringUsingSomeExpensiveFunction();
        Cache.Add(SomeKey, someString, /*a bunch of other parameters*/);
    }
    return someString;
}

如果它不存在,这会将其放入缓存中,但如果存在,它将只使用它。

于 2013-04-02T14:52:15.777 回答