无为清净楼资源网 Design By www.qnjia.com
复制代码 代码如下:
protected void Page_Load(object sender, EventArgs e)    
{    
    webinfo info = new webinfo();    
    Response.Write("有static的执行结果:" + webinfo.a + "<br />");    
    Response.Write("没有static的执行结果:" + info.b);    
}    

public class webinfo    
{    
    public static DateTime a = DateTime.Now;    
    public DateTime b = DateTime.Now;    
}   

下面内容多摘自该文章:结果是只要站点不重启(代码也不修改),那么a的值是恒定不变的,即使将页面关了重新打开也一样;而b则是刷新就变化。如果你从事Asp.Net的开发,提起缓存你可能首先会想到Output Cache、数据源缓存或者是基于System.Web.Caching.Cache的对象缓存。实际上缓存的目的就是把对象(数据)存储在内存中,不用每次需要对象服务的时候都重新创建对象(相对耗时)。将对象声明为static,那么对象将在其所属的类被载入AppDomain时初始化,这样对象的生命周期与AppDomain同样长,从而起到缓存的目的。

设计思想 
       我们经常需要在应用程序中缓存一些常用数据供全局使用以提升性能。如果需要缓存的对象类型和数目是固定的,我们可能会直接将其声明为static;如果我们需要缓存的对象类型和数目是不定的,我们可能会借助一个static Hashtable来实现。但是Hashtable有个缺陷:它没有层次结构,它总是以键/值的形式来存储数据,一个Key对应一个Value,如果我们想获取相关联的一组数据就会比较困难了。 

       XML文档结构是树形的,具有标准的层次结构。XPath用于从Xml文档中选择一个或多个结点。比如 "/BookStore/Book",选择Book结点下的所有子结点。 

       SAF 中的缓存服务通过一个在内存中动态构造的Xml文档树作为桥梁,将静态(static)缓存和XPath 这两个技术结合了起来,支持使用XPath的语法来获取Hashtable中对象。其中静态缓存进行实际的数据缓存,XPath用于获取数据对象。从程序员的角度来看,即是Hashtable的Key支持了XPath的语法,可以将原本“平板式”的Hashtable想象成为一个“树形结构”,它的结点包含了缓存的数据,我们通过标准的XPath到达结点(当然这只是一个假象)并获取数据。通过这种方式就可以使用XPath来一次获取Hashtable中的多个相关数据对象。 简单说,SAF缓存服务是为了实现一个有层次(树形)的缓存结构,从而实现对缓存更加灵活的操作。

而实际上是怎么实现这一过程的呢?我们一步步来看:
1、首先在内存中动态构建一个 Xml文档,它只包含一个根结点,可以任意命名,这里将它命名为了Cache。
2、提供一个Xpath路径:获取对象(数据)前首先要存储对象,存对象自然要先提供一个路径(这里称为“路径”,是因为它是一个XPath,实际上也就相当于Hashtable中的键Key)。
3、根据上一步提供的路径,以Cache为根结点,逐层深入地创建XmlNode结点。
4、生成一个GUID,在叶结点上添加一个Key属性,为这个Key属性赋值为GUID。
5、在Hashtable中存储对象,其中Hashtable的Key即为上一步生成的GUID,而Value为要存储的对象。

       使用这种方式,Hashtable的实际的Key,即动态生成的GUID对程序员来说是透明的,程序员在存储/获取对象时,只需要提供XPath表达式就可以。下面这幅图说明了它们之间的关系:asp.net SAF 中缓存服务的实现第1/5页

这里还需要再说明三点:
1、我们使用Hashtable存储对象,可以直接将Hashtable声明为static的,也可以将Hashtable声明为instance的,但是将Hashtable所属的对象声明为static的。这里应用了Singleton模式,先将对Hashtable的操作封装成一个类,然后在这个类上应用Singleton模式,确保了这个类只有一个(这个类所维护的Hashtable实例自然也只有一个了)。很明显,这个类包含了主要的逻辑,我们将之命名为Cache。
2、使用Hashtable的好处是可以存储任何类型的对象,缺点是丧失了类型安全。有时候我们可能会想使用一个泛型集合类来取代Hashtable,比如Dictionary<T key, T value>。所以这里又引入了Strategy模式,创建了一个ICacheStrategy接口,这个接口包括三个方法,分别用于添加、获取、删除对象。
3、用Xpath获取结点时,可以是基于当前结点的相对路径;也可以是基于根结点的绝对路径。在本文的范例程序中,使用的是绝对路径,显然这样更加方便一些。
12345下一页阅读全文
标签:
asp.net,SAF,缓存服务

无为清净楼资源网 Design By www.qnjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
无为清净楼资源网 Design By www.qnjia.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。