日期:2012-08-06  浏览次数:20483 次

.NET缓存初步ZDNET CHINA|2002-4-24
.NET的cache类可以为微软输出工具箱增加许多典型的缓存功能。在很多开发细节中,cache类可以节约时间,当然它也有很多缺点,比如,要限制一些关键字类型。但是,如果使用得当,它还是可以节约时间。本文中,我主要解释一下如何构造cache,同时,解释一下在必要时如何构造属于自己的cache。

Cache基本知识
cache是用来存储常用信息的高速存储器,使用cache的目的就是要提高系统性能。比如,要开发ASP.NET应用软件以实现许多用户所要求的相同产品列表功能,就要用到cache来存储产品列表。这样可以防止你重复从数据库中读取信息,否则就要降低系统速度、降低性能。

.NET工具箱外caching
.NET中有一个cache类,位于系统Web caching中,ASP.NET中每一个Web Form object都有一个叫做System.Web.Caching.Cache的cache,这是一个叫做item的默认参数化设置。Item会接收很多参数已确定对象已被插入或提出。问题的关键是确定了cache数据。在下面的例子中,关键值“Alphabet”定义了一个可以放在cache中的长量。利用关键值可以从cache中恢复长量。

在这种情况下,记住MyClass代表Web Form object

就象例子中看到的那样,Cache object有item特性。这一特性是object的默认性质,因此在代码中可以省略。但是这种情况是还存在一定危险性。点击这里可以看到代码中的一些默认设置。

如果想要选取捷径,可以减少代码:

MyClass.cache(“Alphabet”) = s

编辑器认为这些代码都是默认值设置,也就是值为“default”。

一旦这些长量放到cache中,就可以得到下面的值:

s = MyClass.cache (“Alphabet”)

如果想用Web Form外面的值,就可以设置一个新的cache对象,如果正在使用Visual Studio.NET的RTM 版本(Manufacturing 或 Commercial Release),可以用下面的设置:

c = new System.Web.Caching.Cache()

创建完cache之后,就可以使用insert或add命令为其设值,当然,也可以利用get命令从cache中恢复对象。

创建自己的cache
也许你担心使用微软的cache会降低系统性能,或者你需要某一关键类型的cache而不是一个长量。(这一限制是System.Web.Caching object的一个缺陷),或者你只是出于好奇想做个试验。

不管什么原因,你就是想创建自己的.NET cache。首先来看看如何创建最基本的、能够存储某些值的cache。在下面的部分里,将要解释一些最基本的cache,同时清除一些不必要的功能。

要创建自己的cache,首先要了解一下HashTable object。HashTable是System.Collections namespace中的一个collections对象,从概念上来理解,object就像是一个档案柜,你可以把object放在档案柜中,同时也可以按类别把它们重新恢复回来。Hashtable object允许object插入和恢复。

现在可以定义一个名为CustomCache的新的类,采用HashTable来存储objects并把它放到cache中,CustomCache有两种方式:名为insertCachedObject的子程序和名为getCachedObject的函数。插入法可以有两个参数:key和object,getCachedObject却只能有一个参数:key(见Listing A)。

CustomCache object中定义了表A所要求的代码:创建CustomCache object并优先使用它。如果只想创建单一模式的cache,也就是所有的代码都能采用同一cache,那么就可以改变Listing B中的object。

注意Listing B中在Hashtable前增加共享关键字,比如增加一些方法和构造器。可以增加第二个private构造器来防止代码创建CustomCache object。现在所有的代码都共享一个HashTable类而无需创建一个CustomCache。就像Java中静态关键字一样,共享关键字也发挥同样的功能,.NET中的共享构造器与Java中的静态模块一样。

Listing C中的例子是一个采用CustomCache来存储和恢复长Alphabet量的程序。

现在一个简单的cache已经完成了。它不能提供在一段时间后自动终止item的功能,同时它也不能实现跟踪最近使用的objects、caching以及其他使用数据,但是这只是一个起点。在以后的文章中,我们会进一步讨论这一问题以及.NET其它的cache功能。