access_time 13 years ago language中文
more_vert

关于asp.net中的Cache

visibility 261 comment 0

刚开始接触.net的时候,一直以为Cache是保存在高速缓冲的硬盘中的(既不清楚当时从哪里得知的了),于是自己就很喜欢使用缓存了,甚至把Session也尝试储存在缓存中,以为这样既可以达到高速,又可以减少内存的占有量(其实这个问题自己就可以推翻,前段时间用SQlite数据库来存储会话状态的时候速度很慢,既然这个就这样如果Cache果真存储在硬盘上的那么速度也会很慢的,不可能快);正是因为这个原因,自己这几天在网上找了很多资料,终于“明白”Cache到底是怎么回事情(之所以加引号是自己还不能确保是否是正确的)。

在这里我想给所有喜欢学习的朋友提几个建议:

1,网上的东西不一定是正确的,包括很多很权威的人话,在没有得到证实之前,最好持怀疑态度,之前我正是因为这个原因遇到了很多本来不存在的麻烦。

2,如果是学习.net可以安装msdn文档,里边很多资料和教程比起网上很多网站的内容要权威得多,当然不排除其中也包含错误,比如自己前段时间学习Asp.net 的Ajax的时候遇到的那个id属性的问题就是属于msdn文档的错误,毕竟文档也是程序员撰写的,难免会出错

3,学习的时候多总结,遇到问题多问几个为什么。

下面是这篇文档:

.net中如何高效使用缓存

 Cache 即高速缓存 ,我想很多人对他的第一印象一定像我一样,感觉他一定能提高系统得性能和运行速度。的确。Net推出cache的初衷确实是这样的。那么cache是如何提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?我在近期开发的项目中有所体会,写下来当作总结也希望能跟大家一起探讨探讨,有错误的地方希望大家批评指正。
  
  1.Cache 是如何工作的
  
  Cache 是分配在服务器上的一个公共的内存片。
  
  所谓公共指的cache只要一创建是任何一个客户端浏览器都可以通过后台代码访问到它,它面向的是所有用户,相对而言session也是服务器上的一段内存,但他面向的是单个用户。它是服务器的一段内存块,也就是说每个cache一经创建就占用了服务器资源的。所以从这点来说我们就可以说:并不是cache越多越好。
  
  cache 是有时间限制的,超过了服务器设定的过期时间,它就会被服务器回收。
  
  c.cache 可以存放任何对象
  
  2.Cache 如何创建以及如何销毁
  
  创建cache
  
  在。Net环境下通过Cache.Insert(string key,object o)方法创建。其中key 代表cache的ID,o代表存到cache里的对象。
  
  销毁cache.
  
  通过方法Cache.Remove(string key)其中key 代表cache的 ID.
  
  调用cache.
  
  Cache支持装箱/拆箱操作。如你可以把一个DataSet对象ds通过Cache.Insert(“dsCache”,ds)的方式存到Cache中,可以通过拆箱操作 DataSet ds = (DataSet)Cache[“dsCache”]来访问它。
  
  3.什么时候用cache
  
  Cache 一般用于数据较固定,用的较频繁的地方。例如可以把进销存系统中可以把产品信息存入cache,在用户调用产品信息时通过调用cache即可,这样从很大程度上减少了用户与数据库的交互,提高了系统的性能。反之,cache不适合用在数据变动快,使用范围很窄的地方。例如把一个具体采购单存入 cache中。
  
  4.cache 调用注意事项
  
  Cache是有时间限制的。超过了服务器设置的过期时间,就会被服务器回收。当cache被回收后对应的内存块就会被清空,再次通过cache[“cachekey”]访问对象时返回的就是null值。所以以下这种调用就会出现异常
  
  DataSet ds = (DataSet)Cache[“cacheds”];
  
  DataRow dr = ds.Table[0].Row[0]; //出错,ds为null值,不存在表0。
  
  正确的写法应该是:
  
  DataSet ds
  
  If(Cache[“cacheds”] != null)
  
  {
  
  ds = (DataSet)Cache[“cacheds”];
  
  }
  
  Else
  
  {
  
  ds= GetDsFromDataBase();
  
  }
  
  DataRow dr = ds.Table[0].Row[0];

(文档结束)

在这里自己顺便提及Session,在自己看来,asp.net中的Session有如下缺点:

1,需要Cookie或者是url中唯一标识字符串的支持;

2,虽然可以用数据库等其他方式存储会话状态数据,但是速度不如储存在内存中的速度快;

3,和asp等其他程序共享很难实现;

4,和客服端软件共享会话状态也比较的难,这种情况有时是很有用的

不过网上依然有很多例子解决了这些问题,下面是一些参考:

http://www.codeproject.com/KB/session/sessiontool.aspx 这篇文章写得不错,大家可以借鉴下

info Last modified by Raymond 13 years ago copyright This page is subject to Site terms.
Like this article?
Share on

Please log in or register to comment.

account_circle Log in person_add Register

Log in with external accounts

Follow Kontext

Get our latest updates on LinkedIn.

Want to contribute on Kontext to help others?

Learn more