.NET cache对象高速缓存机制

来源:互联网 发布:网络电视机用机顶盒吗 编辑:程序博客网 时间:2024/04/27 15:27

在.net中微软给我们提供高速缓存机制,很好的缓解了服务器的压力。.net中提供了aspx页面缓存,cache对象缓存,sql数据库缓存。

这里我只对cache对象缓存使用和背景说下自己的观点。

经常使用动软的代码生成器,在抽象工厂模式下的采用对象缓存创建DAL层实例。一直没有考虑这里的原理,今天翻阅《ASP.NET3.5高级编程》这本书中的高级缓存,突然明白了一个道理,这就是所谓的“学而不思则罔,思而不学则殆”。我们长期在工作的环境下,反而会不去学习思考一些事情,一些代码只知道复制过来,实现了某个功能就行,这样长期下去对自己的职业成长是有影响的。

大家熟知在BS的开发模式下,并行用户是有很多的,而页面的代码,类中对象是共享访问还是有各自独立的实例。很显然每个用户的数据是分离的,是线程独立的。譬如:每个用户的sessionid不同,每个人的实例对象也是不同。例如,一个student类,我的student和其他用户是不一样的,我的studentid,姓名,年龄都是和其他人不同的。这个唯一性是比较好理解吧。

这样的结果就是如果在短时间内,大量用户并行访问网站,就会造成每个会话都会分配一系列的内存空间,短时间内内存得不到释放,系统的访问速度就会降低,性能受到很大影响。

微软给我提供cache缓存对象,缓存是存储在web服务器中应用程序的应用程序域里,所有用户共享使用。类似Application对象,所有会话共享使用。这里就有一个问题要思考,如果我缓存Student类,那怎么能区隔开不同用户的不通过对象实例,显然是不可行的。那什么样的数据适合保存在cache中共享,什么样的数据每个用户是不同的,无法共享使用。

在动软代码生成器中,生成的项目采用三层架构。三层中在bll层创建dal层对象时,采用cache缓存创建对象实例。我翻看dal层类,发现dal层中所有类,没有自己的成员变量,只有共有的成员方法。如果不采用缓存,不同用户每次生成的dal的类对象,没有任何区别,对象调用方法都是传递局部变量,方法调用完对对象没有任何改变。每个人调用都是相同的。

看到这里我恍然大悟,这也就说明了为什么动软把DAL层的类进行的缓存封装,而其他层的类没有缓存。

在使用缓存的时候大家要注意这一点,什么情况下使用缓存,什么数据使用缓存。

像Model实体类,是不能进行缓存共享的,不能保证每个实例都是相同的。在三层中的BLL层也是可以进行缓存处理的,根据实际情况可以自行封装一下。

显然应用级的共享使得所有用户的实例只开辟一片内存空间,像文中提到的DAL层缓存共享,不是每个会话开辟一片内存,而是至始至终只有一片。这样就大大降低了系统的开销,提高了系统的性能。

cache类的使用应该说是比较简单的,类似session的键值对。cache可以保持任何类型的数据。

举例:Cache['Student']=new Student();

 

所以大家在工作开发的时候一定要多思考,不然你开发做了好几年了,回头想想觉得自己的进步太慢了,反观朋友同学升职的升职,高薪的高薪。反倒自己总是在埋怨运气怎么那么差!!这也就验证了古人的话:“学而不思则罔”。

本文转载自:编程中国社区

原创粉丝点击