ASP.NET中的System.Web.Caching.Cache

时间:2013-04-02 14:44:07

标签: asp.net .net

我刚刚发现我正在处理的项目中使用的System.Web.Caching.Cache,我很难找到更多相关信息。

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

示例:

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

2 个答案:

答案 0 :(得分:5)

这是服务器端的应用程序范围缓存。

  

每个应用程序域创建此类的一个实例   只要应用程序域保持活动状态,它就仍然有效。   有关此类实例的信息可通过以下方式获得   HttpContext对象的Cache属性或者的Cache属性   页面对象。 (Cache Class, MSDN

它授予在缓存对象上设置时间限制等功能。它不会承诺当你再次需要它时,对象就会存在。只要有足够的内存就可以将项目保留在缓存中。

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

答案 1 :(得分: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;
}

如果它已经存在,这将把它放在缓存中,如果是,它只会使用它。