这些日子主要的经历都放在微软的 私有云private cloud 动态数据中心Dynamic Data Center 项目上。

关于private cloud 和 Dynamic Data Center是什么,今天就不在这里说了。
最近调试的是 DDC V2 的代码。

代码前台的Silverlight使用了 SL4,RIA。很好。但是发现界面控件之间的重复调用还是很多的。我想在Silverlight的项目中,这种情况还是很多见的。
对付重复调用,考虑使用缓存解决问题。结合我们项目的需求和RIA本身的构架,我还是选择了把缓存放在Silverlight的客户端。
采用超时自动回收的机制,既能实现缓存,又能自动刷新。

本来,英哥给我推荐了Enterprise Library里的缓存。但是发现Silverlight里面不能用。

找了找,没找到。还是决定自己写一个简单的。在网上看到好多人写了,把对象缓存至IsolateStorage里去。
但是想了想,由于缓存在客户端,所以被缓存的对象数目有限,还是就放内存了,写个机制自动清空就行了。

特殊一些的就是可以在添加缓存对象的时候传入一个时间,时间一到,自动回收。回收后,再调用的时候就返回null啦。
正好符合我的要求,哈哈。

最后还是自己写了个简单的类。

下面是代码:

using System;
using System.Collections.Generic;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Browser;

namespace SilverlightCache
{
    public class SLCacheWithAutoRecycle
    {
        static Dictionary<string, object> cacheList = new Dictionary<string, object>();
        static Dictionary<System.Windows.Threading.DispatcherTimer, string> timerList = new Dictionary<System.Windows.Threading.DispatcherTimer, string>();

public static void Add(string key, object value, int recycleTimeInSecond)
        {
            if (!cacheList.ContainsKey(key))
            {
                cacheList.Add(key, value);
                System.Windows.Threading.DispatcherTimer recycleTimer = new System.Windows.Threading.DispatcherTimer();
                timerList.Add(recycleTimer, key);
                recycleTimer.Tick += new EventHandler(recycle);
                recycleTimer.Interval = new TimeSpan(0, 0, recycleTimeInSecond);
                recycleTimer.Start();
            }
        }

public static void Remove(string key)
        {
            if (cacheList.ContainsKey(key))
            {
                cacheList[key] = null;
                cacheList.Remove(key);
            }
        }

public static object Get(string key)
        {
            if (cacheList.ContainsKey(key))
            {
                return cacheList[key];
            }
            return null;
        }

private static void recycle(object o, EventArgs e)
        {
            string key = timerList[(System.Windows.Threading.DispatcherTimer)o];
            Remove(key);
            removeTimer((System.Windows.Threading.DispatcherTimer)o);
        }

private static void removeTimer(System.Windows.Threading.DispatcherTimer timer)
        {
            if (timerList.ContainsKey(timer))
            {
                timerList.Remove(timer);
                timer.Stop();
                timer = null;
            }
        }
    }
}

转载于:https://www.cnblogs.com/uruz7/archive/2010/07/29/1787480.html

可以在Silverlight中使用的,支持定时自动回收的缓存类(C# 代码)相关推荐

  1. Android 中加载网络资源时的优化 缓存和异步机制

    网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制 ...

  2. Silverlight 2中多语言支持实现(上)

    引言 最近项目要在Silverlight 2应用程序中实现本地化,原以为这个过程非常简单,却没想到实现的时候一波三折,好在结果还算不错.需求是这样的,用户第一次访问的时候,默认为英文,当用户选择一种显 ...

  3. SilverLight学习笔记--Silverlight中WebRequest通讯

    本文我们学习如何使用WebRequest类实现客户端和服务器端的通讯.      本例处理过程:在客户端,我们在文本框中输入任意文本,然后用POST方法向服务器端传递信息,服务器端收到从客户端传来的信 ...

  4. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  5. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  6. Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)

    Silverlight中服务通信方式的选择(WCF.Data Service.Ria Service) 转自 http://www.cnblogs.com/024hi/archive/2011/06/ ...

  7. Silverlight中调用WebService-发送邮件测试实例

    Silverlight能够构建强大的企业级应用程序,关键和Silverlight2.0强大数据通信是分不开的,包括SOAP服务的访问,RESTful服务的访问,以及基于Http协议和Socket通信等 ...

  8. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码_转载...

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

最新文章

  1. 通过变长数组(VLA)来看编译器的不同
  2. wpf template的code写法
  3. ARM MMU工作原理剖析[转]
  4. Bootloader传参数到Kernel
  5. mysql 解压缩安装_[mysql] MySQL解压缩安装步骤
  6. 软件工程复习提纲——第八章
  7. 大数据_MapperReduce_Hbase的优化_高可用 预分区_防止数据倾斜_JAVAAPI创建预分区---Hbase工作笔记0026
  8. python写csv文件按升序排列_用python给csv里的数据排序的具体代码
  9. 持久化存储-对象序列化(摘自网络)
  10. 《致云雀》(英)雪莱
  11. 纯html 404页面,一款纯css3实现的漂亮的404页面_html/css_WEB-ITnose
  12. 企业信息化规划的重要性
  13. 程序设计入门c语言代码,C语言程序设计 入门源代码代码集合
  14. pyodbc mysql_pyodbc and mySQL
  15. NFT的未来:RFT、数据经济和Web3堆栈创新的推动者
  16. SNN论文系列-ANN to SNN 学习算法
  17. 是谁拿走了哈萨克斯坦的油气收益?
  18. Excel PivotTable 使用心得手顺分享(一)
  19. 股票入门基础知识1:什么是股票和股份?
  20. 我参加第七届NVIDIA Sky Hackathon——训练ASR模型

热门文章

  1. python拆堆和堆叠的操作_python - 如何合并不同的DFS并堆叠值? - 堆栈内存溢出
  2. 收藏 | 超详细的Oracle19c安装步骤
  3. mysql最常用的索引_mysql常用索引
  4. amd显卡风扇调节_和AMD首席游戏架构师Frank Azor聊聊RX 6000系列显卡那些事儿
  5. Fluid 0.3 新版本正式发布:实现云原生场景通用化数据加速
  6. 深度学习每层的通道数如何计算_模型通道剪枝之DMCP: Differentiable Markov Channel Pruning...
  7. html鼠标点击切换图片,js鼠标点击图片切换效果代码分享
  8. dnf单机无线连接服务器,dnf单机云服务器
  9. 儿童吹泡泡水简单配方_儿童吹泡泡水简单配方[组图]
  10. 【杂谈】从GitHub上星星最多的男人开始发GitHub综述资料