您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> asp.net >> 正文

用.NET创建定时缓存

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-1-30 我要参与讨论

 


在先前的文章里,我详细讨论了.net缓存的简单用法。不过那点用途还只能是这一话题的“开胃酒”。现在,我们更进一步,在那篇文章所开发的缓存基础上添加条目在缓存中的过期功能。

清单a的内容就是上次我们开发的有关代码。

新缓存及其改进
为了创建定时缓存,我们首先得确定某个对象是否已经到期了。出于这篇文章讨论范围,我假设用户能够确定准确的对象超期日期。这样,在将来还可以再改进为允许在缓存中存放的对象自己确定它们的过期日期。

我们首先修改insertcachedobject方法以支持缓存中对象的过期功能。当对象插入缓存时,该方法会给用户提供一个对象过期日期。这个日期参数被称为dtexpiration。insertcachedobject方法则存储经由该参数传递的过期日期。完成这一目标有若干方法。例如,我们可以创建一个封装对象,其中包含了日期和对象属性。如果这样做的话,insertcachedobject方法就会创建封装对象的实例并提供给它两个属性。我们选择相比更简单些的第二个方案:创建和声明第2个哈希散列表,并且指定它同第一个哈希散列表并行运行。这第二个哈希散列表叫做htexpiration。

对 insertcachedobject 方法的修改请见清单b。

现在,我们需要想办法发现过期的条目。在通过getcachedobject方法发出请求时,简单而且也是最偷懒的办法是检查每个缓冲对象。因为直到发出处理请求才调出过期对象,所以这是一种较差的算法。而且很有可能在时间上具有一定的不确定性。虽然这些到期对象驻留在缓存里,可是它们消费着珍贵的内存资源,这对应用程序的性能具有极其不利的影响。

不用这种偷懒的办法,我们创建一个后台线程反复检查htexpiration哈希表。

于是我们创建一个名叫thereaperthread的类,这个类有一个方法负责建立无限循环。该类还被声明为内部类,因为它只用在customcache对象的上下文环境内。该类的全部代码请见清单c。

你得对清单c中的shared constructor注意了,它负责创建新的线程并启动该线程。我们接下来创建测试程序保证缓存运行正常。测试程序见清单d,该程序是一个控制台程序,当然也可以用.net framework 把以上程序当作项目来创建。

小结
定时缓存就这样完全实现了。虽然在功能上还比较简单,而且不能通知缓存的用户条目在什么时候到期,也不允许对象确定它们自己的过期算法。不过在这种简单缓存的基础上,将来我们还可以讨论开发新的功能,比如分派、内存管理等等。

listing a

'defines a public class called customcache
public class customcache
'declares the hashtable use to store everything put into the cache.
'since ht is shared the

[1] [2] [3] [4] [5] [6] [7] 下一页

在google里搜索更多用.NET创建定时缓存

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明