.NET中怎么有效的使用Cache

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];

时间: 2024-08-27 00:41:43

.NET中怎么有效的使用Cache的相关文章

SylixOS中PPC架构系列介绍-Cache篇

1. Cache简介 Cache:高速缓冲存储器,是位于CPU和主存储器DRAM(DynamicRandomAccessMemory)之间,规模较小,但速度很高的存储器,通常由SRAM(StaticRandomAccessMemory静态存储器)组成.它是位于CPU与内存间的一种容量较小但速度很高的存储器. 2. SylixOS中Cache架构 SylixOS中为了对Cache进行有效的管理,提供了API层的系统接口,隐藏硬件架构之间的差异.在不同的CPU架构下,又各自封装了Arch层的Cach

关于缓存中Cookie,Session,Cache的使用

文章来源:http://canann.iteye.com/blog/1941173 以前实现数据的缓存有很多种方法,有客户端的Cookie,有服务器端的Session和Application. 其中Cookie是保存在客户端的一组数据,主要用来保存用户名等个人信息. Session则保存对话信息.Application则是保存在整个应用程序范围内的信息,相当于全局变量. Session Session用来保存每一个用户的专有信息 Session的生存期是用户持续请求时间加上一段时间(一般是20分

zookeeper中的事件监听--cache篇

最近有接触zookeeper,有用到一部分的功能,所以在这里简单记录一下: Curator中事件的监听 原生zookeeper的事件监听采用Watcher实现,不过Watcher监听是一次性的,如果需要继续监听该事件,必须重新注册. Curator中采用cache来封装了对事件的监听,在包org.apache.curator.framework.recipes.cache封装了3种类型的事件监听. cache 分为三种(其实就是从不同的维度去解析cache): 1.PathChildrenCac

android中图片的三级缓存cache策略(内存/文件/网络)

实现图片缓存也不难,需要有相应的cache策略.这里我采用 内存-文件-网络 三层cache机制,其中内存缓存包括强引用缓存和软引用缓存(SoftReference),其实网络不算cache,这里姑且也把它划到缓存的层次结构中 1.简介 现在android应用中不可避免的要使用图片,有些图片是可以变化的,需要每次启动时从网络拉取,这种场景在有广告位的应用以及纯图片应用(比如百度美拍)中比较多. 现在有一个问题:假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量.在当前的状况下,对于非wi

关于Oracle 11gR2中的Database Smart Flash Cache特性以及该特性所适用的操作系统

参考自: How To Size the Database Smart Flash Cache (文档 ID 1317950.1) 首先是对Database Smart Flash Cache的介绍: The Database Smart Flash Cache is a new feature in Oracle Database 11g Release 2 (11.2). The Database Smart Flash Cache is a transparent extension of

Cache基本知识与OR1200中ICache简介

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 12.1 Cache基本知识 12.1.1 Cache的作用 处理器的设计者一般会声称其设计的处理器一秒钟能做多少次乘法.每条指令只占用xx个时钟周期,可是当我们实际使用处理器时,就会发现并不是那么回事,比如在第11章,从图11.8中可以发现,当程序运行在简单SOPC上时,原先设计在执行阶段只需要一个时钟周期的指令l.movhi却使用了6个时钟周期才完成执行,造成实际情况与设计不符的原因是由于实际情况是一个由多个模块.设备组成的系统,读者

Linux内存中的Cache真的能被回收么?

Linux内存中的Cache真的能被回收么? ![Recycle] (http://sc.websbook.com/sc/upimg/allimg/090228/014_1600_websbook_com.jpg) 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: [[email protected] ~]# free             total       used       free     s

Linux下free命令输出中buffers/cache详解

第一行我们就不介绍了(含有total的行)红色字体部分比较重要. 第二行和第三行很多人就看的不是太懂.在这里详细说下.相信你看了会多少了解点. 首先来解释下buffers和cache  buffers:自己看看他们的英文解释很容易明白的.         A buffer is something that has yet to be "written" to disk.意思就说将要写入硬盘中的数据的缓存     cache:             A cache is someth

浅谈Linux 内存中的Cache: buffers 与 cached

Linux 内存中的Cache,真的能被回收么? 您真的了解Linux的free命令么? 在Linux系统中,我们经常用free命令来查看系统内存的使用状态.在一个RHEL6的系统上,free命令的显示内容大概是这样一个状态: 这里的默认显示单位是kb,我的服务器是128G内存,所以数字显得比较大.这个命令几乎是每一个使用过Linux的人必会的命令,但越是这样的命令,似乎真正明白的人越少(我是说比例越少). 一般情况下,对此命令输出的理解可以分这几个层次: 不了解.这样的人的第一反应是:天啊,内