快速业务通道

用ASP.NET缓存提高站点性能

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-22
,因此它不会到期,除非缓存引擎为了给其他缓存数据提供空间而将其删除。要包括特定的缓存依赖项,可使用Add()或Insert()方法。其中每个方法都有几个重载。Add()和Insert()之间的唯一区别是,Add()返回对已缓存对象的引用,而Insert()没有返回值(在C#中为空,在VB中为Sub)。

示例

Cache.Insert("key", myXMLFileData, new
System.Web.Caching.CacheDependency(Server.MapPath("users.xml")));

该示例可将文件中的xml数据插入缓存,无需在以后请求时从文件读取。CacheDependency的作用是确保缓存在文件更改后立即到期,以便可以从文件中提取最新数据,重新进行缓存。如果缓存的数据来自若干个文件,还可以指定一个文件名的数组。

Cache.Insert("dependentkey", myDependentData, new
System.Web.Caching.CacheDependency(new string[] {}, new string[]
{"key"}));

该示例可插入键值为“key”的第二个数据块(取决于是否存在第一个数据块)。如果缓存中不存在名为“key”的键,或者如果与该键相关联的对象已到期或被更新,则“dependentkey”的缓存条目将到期。

Cache.Insert("key", myTimeSensitiveData, null,
DateTime.Now.AddMinutes(1), TimeSpan.Zero);

绝对到期:此示例将对受时间影响的数据缓存一分钟,一分钟过后,缓存将到期。注意,绝对到期和滚动到期(见下文)不能一起使用。

Cache.Insert("key", myFrequentlyAccessedData, null,
System.Web.Caching.Cache.NoAbsoluteExpiration,
TimeSpan.FromMinutes(1));

动态滚动到期:此示例将缓存一些频繁使用的数据。数据将在缓存中一直保留下去,除非数据未被引用的时间达到了一分钟。注意,动态滚动到期和绝对到期不能一起使用。

更多选项

除了上面提到的依赖项,我们还可以指定项的优先级(依次为low、high、NotRemovable,它们是在System.Web.Caching.CacheItemPriority枚举中定义的)以及当缓存中的对象到期时调用的CacheItemRemovedCallback函数。大多数时候,默认的优先级已经足够了-缓存引擎可以正常完成任务并处理缓存的内存管理。CacheItemRemovedCallback选项考虑到一些很有趣的可能性,但实际上它很少使用。不过,为了说明该方法,我将提供它的一个使用示例:

CacheItemRemovedCallback示例

System.Web.Caching.CacheItemRemovedCallback callback = new System.Web.Caching.CacheItemRemovedCallback (OnRemove);
Cache.Insert("key",myFile,null,
 System.Web.Caching.Cache.NoAbsoluteExpiration,
 TimeSpan.Zero,
 System.Web.Caching.CacheItemPriority.Default, callback);
. . .
public static void OnRemove(string key, object cacheItem,
 System.Web.Caching.CacheItemRemovedReason reason)
{
 AppendLog("The cached value with key ''" + key +
"'' was removed from the cache. Reason: " +
 reason.ToString());
}

该示例将使用AppendLog()方法中定义的任何逻辑来记录缓存中的数据到期的原因。通过在从缓存中删除项时记录这些项并记录删除的原因,您可以确定是否在有效地使用缓存或者您是否可能需要增加服务器上的内存。注意,callback是一个静态(在VB中为Shared)方法,建议使用该方法的原因是,如果不使用它,保存回调函数的类的实例将保留在内存中,以支持回调(对static/Shared方法则没有必要)。

该特性有一个潜在的用处-在后台刷新缓存的数据,这样用户永远都不必等待数据被填充,但数据始终保持相对较新的状态。但实际上,此特性并不适用于当前版本的缓存API,因为在从缓存中删除缓存的项之前,不触发或不完成回调

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号