最简单的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;
    }
版权说明

  如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。
  作      者:温景良
  文章出处:http://wenjl520.cnblogs.com/  或  http://www.cnblogs.com/

分类: C#
0
0
« 上一篇: GIS英文词汇翻译
» 下一篇: SQL和VS的安装顺序
posted @ 2009-03-09 22:20 温景良(Jason) Views( 209) Comments( 2) Edit 收藏

  
#1楼 2009-03-17 22:52 | Todd Wei  
不错!

  
#2楼 2009-03-19 14:49 | Todd Wei  
Buffer的大小需要控制,否则可能不断增长,导致泄漏。特别是,当value已经被回收,应该把该项从Buffer清除掉。

相关文章
|
开发框架 Java 关系型数据库
虚拟机部署与发布J2EE项目(Linux版本)
虚拟机部署与发布J2EE项目(Linux版本)
203 0
|
开发者 Python
正则替换 | 学习笔记
快速学习 正则替换
157 0
正则替换 | 学习笔记
|
大数据 PHP 区块链
区块链开发公司浅析未来区块链的发展趋势
 目前,企业的实际应用集中数字货币领域,属于虚拟经济。我们认为,未来的区块链应用将脱虚向实,更多传统企业使用区块链技术来降成本、提升协作效率,激发实体经济增长,是未来一段时间区块链应用的主战场。   与公有链不同,在企业级应用中,大家更关注区块链的管控、监管合规、性能、安全等因素。
1848 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
590 212