手机版

在SAF中实现缓存服务 ASP.NET第1/5页

时间:2021-11-26 来源:互联网 编辑:宝哥软件园 浏览:

复制代码如下: ProtectedVoidpage _ load(对象发送者,eventargse){ webinfoinfo=new webinfo();回应。Write('带有静态执行结果:' web info . a ' br/');回应。Write('无静态执行结果:' info . b ');} public class webinfo { publicationstatedatetimea=DateTime。现在;publicDateTimeb=日期时间。现在;}以下内容多取自本文:结果是只要网站不重启(且代码不修改),a的值就是常量,即使页面关闭重新打开;而b在刷新时会发生变化。如果你从事Asp.Net的开发,可能会想到基于System的输出缓存、数据源缓存或者对象缓存。首先是网页缓存。实际上,缓存的目的是将对象(数据)存储在内存中,而不是每次需要对象服务时都重新创建对象(这相对耗时)。将对象声明为静态,那么当其类加载到AppDomain中时,对象将被初始化,这样对象的生命周期就和AppDomain一样长,从而达到缓存的目的。我们经常需要缓存应用程序中一些常用的数据以供全局使用,从而提高性能。如果要缓存的对象的类型和数量是固定的,我们可以将它们声明为静态的;直接。如果我们需要缓存的对象的类型和数量不确定,我们可以使用静态哈希表来实现。但是,Hashtable有一个缺陷:它没有层次结构,它总是以Key/Value的形式存储数据,一个键对应一个值,所以我们获取一组关联数据会比较困难。XML文档结构是树形的,具有标准的层次结构。XPath用于从Xml文档中选择一个或多个节点。例如,'/书店/书籍',选择书籍节点下的所有子节点。SAF中的缓存服务使用一个在内存中动态构造的Xml文档树作为桥梁,将静态缓存和XPath相结合,支持使用XPath语法获取Hashtable中的对象。其中,静态缓存用于缓存实际数据,XPath用于获取数据对象。从程序员的角度来看,也就是Hashtable的Key支持XPath语法,所以原来的“扁平”Hashtable可以认为是一个“树形结构”,它的节点包含缓存的数据。我们通过标准的XPath到达节点(当然,这只是一种错觉)并获取数据。通过这种方式,XPath可以用来一次获取Hashtable中多个相关的数据对象。简单来说,SAF缓存服务就是实现一个层次(树)缓存结构,从而实现缓存更灵活的操作。其实这个过程是怎么实现的呢?我们一步一步来看:1。首先,在内存中动态构建一个Xml文档,它只包含一个根节点,可以任意命名。这里,它被命名为缓存。2.提供一个XPath路径:在获取对象(数据)之前,必须先存储对象,自然也就必须先提供一个存储对象的路径(这叫做“path”,因为它是一个Xpath,实际上相当于Hashtable中的Key)。3.按照上一步提供的路径,以Cache为根节点,逐层创建XmlNode节点。4.生成一个GUID,在叶节点上添加一个Key属性,并将Key属性指定为GUID。5.将对象存储在Hashtable中,其中Hashtable的Key是上一步生成的GUID,Value是要存储的对象。这样,Hashtable的实际Key,也就是动态生成的GUID,对程序员来说是透明的,程序员在存储/获取对象时只需要提供XPath表达式。下图说明了它们之间的关系:

这里要说明三点:1。我们使用Hashtable来存储对象,可以直接声明为static,也可以声明为instance,但是Hashtable所属的对象声明为static。这里,应用了Singleton模式。首先将Hashtable的操作封装到一个类中,然后将Singleton模式应用到这个类中,这样就保证了只有一个类(自然也就只有这个类维护的一个Hashtable实例)。显然,这个类包含了主要的逻辑,所以我们将其命名为Cache。2.使用Hashtable的优点是可以存储任何类型的对象,缺点是失去了类型安全性。有时我们可能想用一个泛型集合类来替换Hashtable,比如DictionaryT,key,T value。因此,这里引入了策略模式,并创建了一个ICacheStrategy界面。该界面包括三种方法,分别用于添加、获取和删除对象。3.通过Xpath获取节点时,可以基于当前节点的相对路径;或者基于根节点的绝对路径。在这个示例程序中,使用了绝对路径,这显然更方便。阅读下一页的全文。

版权声明:在SAF中实现缓存服务 ASP.NET第1/5页是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。