- 1、本文档共240页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
在编码层,我们可以使用不同的机制保存对象,可以使用应用状态变量作为缓存,应用状态存储的任何对象在所有会话中都可引用。但是,试图以应用状态变量作为高速缓存的错误在哪里呢?这里存在好几个问题:我们必须清楚内存大小。我们必须手工更新列表并删除旧表。最后当更新缓存数据时,我们必须管理线程并锁定对象。ASP.Net提供缓存类的名字空间,能自动执行需要缓存的任务,它允许我们执行以下任务:
①使用应用状态语法:Cache[“indexkey”]=object,这种方法很容易使用;
②自动过期:对不经常使用的项,自动让它相对或绝对过期;
③定义缓存项和其他项的依赖关系;
④自动回调:给缓存项添加事件处理程序,当该项从缓存中删除时,就调用事件处理程序,这样我们就有机会更新缓存或者不删除某项;⑤自动管理线程避免冲突。
下面详细讨论缓存类中的两个类:
(1)Cache类:我们需要创建缓存类的对象来缓存数据。当在一个会话中创建缓存类的实例后,这个实例将:
①被应用中的所有会话共享;
②应用激活的整个时段内都是可用的。
(2)CacheDependency类:当我们把一个对象加入到缓存对象中,它定义了某一参数类型。CacheDependency类可以:
①建立添加到缓存中的项(对象)和其他元素的依赖关系,其他元素可以是文件、缓存码、数组或者另一个CacheDependency对象。
②监控依赖关系,一旦关系改变,缓存项就会被自动移除。
我们首先讨论Cache类,这个类定义了支持缓存操作的几个方法:
(1)Add:给已存在的缓存对象添加指定项,如依赖、过期、优先级以及回调代理,回调代理的作用是当缓存中的项被移除时,向应用发出通知。
(2)Remove:从应用的缓存对象中移除指定项。
(3)Get:从缓存对象中恢复指定项。(4)GetType:获取当前实例的类型(从Object继承)。
(5)ToString:将当前对象转化成字符串(从Object继承)。
(6)Insert:向缓存插入新数据对象,它是创建缓存的主要方法。下面定义了5种重载方法,它们应用不同的参数列表,满足向缓存中插入新数据的不同需求。
①Insert(String,Object);这个操作支持不同状态管理机制的不同语法,例如会话状态和应用状态:Cache[“indexkey”]=item;
②Insert(String,Object,CacheDependency);③Insert(String,Object,CacheDependency,DateTime,TimeSpan);
④Insert(String,Object,CacheDependency,DateTime,TimeSpan,CacheItemUpdateCallback);
⑤Insert(String,Object,CacheDependency,DateTime,TimeSpan,CacheItemPriority,CacheItemRemovedCallback)。表5.4是对insert方法中各个参数的说明。正如表中所述,CacheDependency类定义了insert方法的一个参数。这个类定义了缓存对象中的项和文件、缓存码、数组或另一个CacheDependency对象之间的依赖关系,这个依赖关系可以包含在insert()方法中,也可以用Add()方法进行添加。CacheDependency类监视依赖关系,所以一旦依赖关系有所改变,缓存项将被自动移除。如果不想定义依赖关系可以使用null方法。下面举几个例子说明类及方法的使用。下面代码缓存两个数据项:“DellPrinter1710”和“CartridgeforPrinter1710”,如果移除“DellPrinter1710”,缓存项“CartridgeforPrinter1710”将会被自动移除。
protectedvoidbtnAddBook_Click(objectsender,EventArgse){//createtwocacheitems
stringitem1=DellPrinter1710;stringitem2=CartridgeforPrinter1710;
Cache.Insert(PrinterKey,item1,null,DateTime.Now.AddMinutes(10),
TimeSpan.Zero,CacheItemPriority.Default,CacheRemovedCallBack);
Cache.Insert(CartridgeKey,item2
文档评论(0)