.NET缓存初步
2024-07-10 13:02:13
供稿:网友
.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功能。