我刚刚发现我正在处理的项目中使用的System.Web.Caching.Cache
,我很难找到更多相关信息。
我的问题是这个缓存是如何持久化的?是客户端(类似于ViewState
),服务器端(Session
)?完全不同?
示例:
protected string FileContent
{
get
{
return Cache[FILE_UPLOAD_KEY + Id] as string ?? GetFileUpload();
}
}
答案 0 :(得分:5)
这是服务器端的应用程序范围缓存。
每个应用程序域创建此类的一个实例 只要应用程序域保持活动状态,它就仍然有效。 有关此类实例的信息可通过以下方式获得 HttpContext对象的Cache属性或者的Cache属性 页面对象。 (Cache Class, MSDN)
它授予在缓存对象上设置时间限制等功能。它不会承诺当你再次需要它时,对象就会存在。只要有足够的内存就可以将项目保留在缓存中。
因此,它不是用于在页面视图之间传递对象(使用ViewState或Session)或控件(使用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;
}
如果它已经存在,这将把它放在缓存中,如果是,它只会使用它。