sp1234在CSDN写的Cache精华贴

仔细模拟一下你的数据库程序,你有没有发现在计算时(特别是多用户计算时)经常重复读取数据库数据?!这是数据库处理程序的性能的最主要的杀手。

有些人说在写程序之前应该把算法想好,使得数据记录成批地、一次性地读取。但是这实际上往往不可能,因为复杂的程序贴近逻辑流程才清晰可维护。更何况这也不能解决多用户访问的情况。最好,我们根本不用在写程序时去考虑数据是否会被重复读取从而改变程序流程,但是又能自然而然地防止重复读取数据库。当对计算过程进行优化,而又不想破坏逻辑清晰性的时候,当然就是要依靠简单的Cache —— 对象只要能够缓存几秒钟就好。

下面我这里写一个世界上最懒惰的程序员使用.net写的一个最简单的Cache,但是它往往可以让复杂的计算程序大大提高计算速度。

代码
 
   
using System;
using System.Collections.Generic;

namespace DomainBase
{
public class ObjectCache
{
// Dictionary<K,T> 会自动维护一个空链表来保存不用的单元。
// 这里,使用被缓存对象的“弱引用”,允许这些对象被垃圾回收。

private Dictionary < string , WeakReference > Buffer = new Dictionary < string , WeakReference > ();

public object this [ string key]
{
get
{
WeakReference ret;
if (Buffer.TryGetValue(key, out ret) && ret.IsAlive)
return ret.Target;
else
return null ;
}
set
{
WeakReference ret;
if (Buffer.TryGetValue(key, out ret))
ret.Target
= value;
else
Buffer.Add(key,
new WeakReference(value));
}
}

public void Remove( string key)
{
Buffer.Remove(key);
}
}
}

这就是最简单的Cache。例如:

public Class User
{
  static ObjectCache Buffer=new ObjectCache();
 
  public static GetUser(string id)
  {
  User ret=Buffer[id];
  if(ret==null)
  {
  ret=读取数据库产生User对象(id);
  Buffer[id]=ret;
  }
  return ret;
  }
.....

这里,在一个Dictionary<K,T>结构字典中保存了对象的key以及对象的“弱引用”。这样,当内存不足时GC会照样去释放被缓存的对象。当我们需要将对象在几秒钟内进行缓存时,使用这个最简单的Cache很有用。

转载于:https://www.cnblogs.com/neekerss/archive/2010/12/30/1921664.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值