C# Cache何时使用及使用方法

Cache 即高速缓存.那么cache是怎么样提高系统性能与运行速度呢?是不是在任何情况下用cache都能提高性能?是不是cache用的越多就越好呢?我在近 期开发的项目中有所体会,写下来当作总结也希望能跟大家一起探讨探讨,有错误的地方希望大家批评指正。
  1.Cache 是怎么样工作的?
  Cache 是分配在服务器上的一个公共的内存片。
  所谓公共指的cache只要一创建是任何一个客户端浏览器都可以通过后台代码访问到它,它面向的是所有用户,相对而言session也是服务器上的一 段内存,但他面向的是单个用户。它是服务器的一段内存块,也就是说每个cache一经创建就占用了服务器资源的。所以从这点来说我们就可以说:并不是 cache越多越好。  
  cache 是有时间限制的,超过了服务器设定的过期时间,它就会被服务器回收。
  cache 可以存放任何对象
  
  2.Cache 怎么样创建以及怎么样销毁  
  创建cache  
  在DotNet环境下通过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-10-01 04:09:00

C# Cache何时使用及使用方法的相关文章

Gradle's dependency cache may be corrupt解决方法

问题描述: Error:Unable to find method 'com.google.common.cache.CacheBuilder.build(Lcom/google/common/cache/CacheLoader;)Lcom/google/common/cache/LoadingCache;'. Possible causes for this unexpected error include: Gradle's dependency cache may be corrupt (

Centos7 cache/buff过高处理方法

当linux运行久点,会产生很多不必要的cache或者buff,导致占用太多的内存,其实这可以手动去释放它. [[email protected] ~]# free               total        used        free      shared  buff/cache   available Mem:        8073628     1374360     2004964      385620     4694304     5820840 Swap:  

[Asp.Net]状态管理(Session、Application、Cache、Cookie 、Viewstate、隐藏域 、查询字符串)

Session:  1. 客户在服务器上第一次打开Asp.Net页面时,会话就开始了.当客户在20分钟之内没有访问服务器,会话结束,销毁session.(当然也可以在Web.config中设置缓存时间)可以在Global.aspx的Session_Start()事件处理程序中,可以初始化会话变量.在下面的实例中,名为mydata的会话状态被初始化为0: 运行结果: 2.Session是保存在服务器端的用户变量.我可以在一个页面中对Session进行值,然后在另一个页面里访问它. Session的

java Cache框架

Cache框架乱炖 各类开源的缓存解决方案 JBossCache/TreeCacheJBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作.JBossCache能够通过Jboss应用服务或其他J2EE容器来运行一个Mbean服务,当然,它也能独立运行. JBossCache包括两个模块:TreeCache和TreeCacheAOP. TreeCache --是一个树形结构复制的事务处理缓存. Tre

guava之cache

转自:http://ifeve.com/google-guava-cachesexplained/ 范例 01 LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() 02         .maximumSize(1000) 03         .expireAfterWrite(10, TimeUnit.MINUTES) 04         .removalListener(MY_LISTENER) 05         

LeetCode 之 LRU Cache Java实现

LeetCode刷了41道题了,流程是按照戴兄的小书,很多不会的是参考Kim姐的代码,自己用Java抠腚的. 前几天做到了LRU Cache: C++的实现方法大同小异,大都用的是一个list加一个hash,hash中存储list节点地址,每次get从hash中寻key,有则将list相应节点放到链表头,没有则返回-1:每次set先判断hash中是否存在,存在则将相应节点移到表头,重置value值,如果不存在,判定长度是否达到预设的capacity,如果达到,删除表尾节点,新节点插入表头. 但是

基于页面染色技术的内存数据库访问优化方法

本发明公开了一种基于页面染色技术的内存数据库访问优化方法.该方法首先将弱局部性数据集的所有数据页面的访问顺序按页面颜色进行排序,并将所有数据页面按页面颜色进行分组,然后按页面颜色分组的顺序扫描弱局部性数据集的所有数据页面.进一步地,预设若干具有相同页面颜色的内存页面作为页面颜色队列,该页面颜色队列用作内存页面被加载入CPU缓存之前的内存缓存:弱局部性数据集的数据页面首先通过异步方式进入页面颜色队列,然后再被加载到CPU缓存中完成数据处理.本发明能够解决内存数据库应用中无法依赖页面颜色为进程.线程

Java 中常用缓存Cache机制的实现

所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 缓存主要可分为二大类: 一.通过文件缓存,顾名思义文件缓存是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式: 二.内存缓存,也就是实现一个类中静态Map,对这个Map进行

关于cache性能优化

1.不要期望编译器对你做任何优化 2.Cache系统代表性的包括三种级别:(1)第一级cache (L1)位于CPU芯片上并且运算于CPU工作频率:(2)第二级cache(L2)也位于芯片上比L1速度慢而体积大:(3)第三级cache(L3)位于CPU外部,是速度最慢.体积最大的存储器. 3.当运算器需要从存储器中提取数据时,它首先在最高级的cache中寻找然后在次高级的cache中寻找.如果在cache中找到,则称为命中hit:反之,则称为不命中miss. 4.cache misses的种类: