概述
Cache作为ASP.Net应用程序状态管理之一的方法,管理瞬间状态的高速缓存对象,在并发量大,效率要求较高的Application应用较广。
Cache除了与Application一样是一个简单的键、值对的HashTable之外,还有其独特之处:
1. Cache可以基于依赖项的终止
依赖项可以是其他的Cache关键字、文件或者是时间戳。如果Cache的依赖项发生改变或终止,该项Cache内容就会无效并移除。
2. 锁定管理
ASP.net是多线程系统,当多个线程同时访问Cache时,必然应用锁定防止同时更新。这个问题Appliction的解决方法是用Lock()和UnLock()方法来锁定,当然,Cache不同,其可以自行管理内部锁定,所以更新Cache时,程序员不用做任何操作。
3. CallBack回调
该功能可以在Cache被删除时运行代码。
应用
如何把Cache应用到我们的实现工作中呢?偶目前正在做一个KMS项目,并发量很大且对速度效率要求很高,在前台展现方面可能会出现性能瓶颈。为此,我们考虑应用SQL Server 2000生成XML文件,并把XML存入高速缓冲(Cache),前台展现只从XML文档获取数据,这样可以减少访问数据库,同时读取Cache中的数据,速度也可以保证。下面是其中一段代码,仅供参考。
[C#]
public void Insert(
string key,
object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration
);
参数
key
用于引用该对象的缓存键。
value
要插入缓存中的对象。
dependencies
所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含空引用(Visual Basic 中为 Nothing)。
absoluteExpiration
所插入对象将过期并被从缓存中移除的时间。
slidingExpiration
最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。
如果 slidingExpiration 参数设置为 NoSlidingExpiration,则禁用可调整过期。如果将 slidingExpiration 参数设置为大于 Zero,则 absoluteExpiration 参数设置为 Now 加 slidingExpiration 参数中包含的值。如果在 absoluteExpiration 参数指定的时间之前从缓存请求该项,该项将再次放入缓存,并且 absoluteExpiration 将再次设置为 DateTime.Now 加 slidingExpiration 参数中包含的值。如果在 absoluteExpiration 参数中的日期以前并未从缓存中请求该项,则从缓存移除该项。
Cache作为ASP.Net应用程序状态管理之一的方法,管理瞬间状态的高速缓存对象,在并发量大,效率要求较高的Application应用较广。
Cache除了与Application一样是一个简单的键、值对的HashTable之外,还有其独特之处:
1. Cache可以基于依赖项的终止
依赖项可以是其他的Cache关键字、文件或者是时间戳。如果Cache的依赖项发生改变或终止,该项Cache内容就会无效并移除。
2. 锁定管理
ASP.net是多线程系统,当多个线程同时访问Cache时,必然应用锁定防止同时更新。这个问题Appliction的解决方法是用Lock()和UnLock()方法来锁定,当然,Cache不同,其可以自行管理内部锁定,所以更新Cache时,程序员不用做任何操作。
3. CallBack回调
该功能可以在Cache被删除时运行代码。
应用
如何把Cache应用到我们的实现工作中呢?偶目前正在做一个KMS项目,并发量很大且对速度效率要求很高,在前台展现方面可能会出现性能瓶颈。为此,我们考虑应用SQL Server 2000生成XML文件,并把XML存入高速缓冲(Cache),前台展现只从XML文档获取数据,这样可以减少访问数据库,同时读取Cache中的数据,速度也可以保证。下面是其中一段代码,仅供参考。
protected void RefreshCache (string key, object item,CacheItemRemovedReason reason)
{
string filename="c:\abc.xml";
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(filename);
CacheXml.Insert(
"CacheName"
,xmldoc
,new CacheDependency (filename)
,Cache.NoAbsoluteExpiration
,Cache.NoSlidingExpiration
,CacheItemPriority.Default
,new CacheItemRemovedCallback (RefreshCache)
);
}
{
string filename="c:\abc.xml";
XmlDocument xmldoc=new XmlDocument();
xmldoc.Load(filename);
CacheXml.Insert(
"CacheName"
,xmldoc
,new CacheDependency (filename)
,Cache.NoAbsoluteExpiration
,Cache.NoSlidingExpiration
,CacheItemPriority.Default
,new CacheItemRemovedCallback (RefreshCache)
);
}
[C#]
public void Insert(
string key,
object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration
);
参数
key
用于引用该对象的缓存键。
value
要插入缓存中的对象。
dependencies
所插入对象的文件依赖项或缓存键依赖项。当任何依赖项更改时,该对象即无效,并从缓存中移除。如果没有依赖项,则此参数包含空引用(Visual Basic 中为 Nothing)。
absoluteExpiration
所插入对象将过期并被从缓存中移除的时间。
slidingExpiration
最后一次访问所插入对象时与该对象过期时之间的时间间隔。如果该值等效于 20 分钟,则对象在最后一次被访问 20 分钟之后将过期并被从缓存中移除。
如果 slidingExpiration 参数设置为 NoSlidingExpiration,则禁用可调整过期。如果将 slidingExpiration 参数设置为大于 Zero,则 absoluteExpiration 参数设置为 Now 加 slidingExpiration 参数中包含的值。如果在 absoluteExpiration 参数指定的时间之前从缓存请求该项,该项将再次放入缓存,并且 absoluteExpiration 将再次设置为 DateTime.Now 加 slidingExpiration 参数中包含的值。如果在 absoluteExpiration 参数中的日期以前并未从缓存中请求该项,则从缓存移除该项。