可以在Silverlight中使用的,支持定时自动回收的缓存类(C# 代码)
这些日子主要的经历都放在微软的 私有云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# 代码)相关推荐
- Android 中加载网络资源时的优化 缓存和异步机制
网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制 ...
- Silverlight 2中多语言支持实现(上)
引言 最近项目要在Silverlight 2应用程序中实现本地化,原以为这个过程非常简单,却没想到实现的时候一波三折,好在结果还算不错.需求是这样的,用户第一次访问的时候,默认为英文,当用户选择一种显 ...
- SilverLight学习笔记--Silverlight中WebRequest通讯
本文我们学习如何使用WebRequest类实现客户端和服务器端的通讯. 本例处理过程:在客户端,我们在文本框中输入任意文本,然后用POST方法向服务器端传递信息,服务器端收到从客户端传来的信 ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...
- Silverlight中服务通信方式的选择(WCF、Data Service、Ria Service)
Silverlight中服务通信方式的选择(WCF.Data Service.Ria Service) 转自 http://www.cnblogs.com/024hi/archive/2011/06/ ...
- Silverlight中调用WebService-发送邮件测试实例
Silverlight能够构建强大的企业级应用程序,关键和Silverlight2.0强大数据通信是分不开的,包括SOAP服务的访问,RESTful服务的访问,以及基于Http协议和Socket通信等 ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码_转载...
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
最新文章
- 通过变长数组(VLA)来看编译器的不同
- wpf template的code写法
- ARM MMU工作原理剖析[转]
- Bootloader传参数到Kernel
- mysql 解压缩安装_[mysql] MySQL解压缩安装步骤
- 软件工程复习提纲——第八章
- 大数据_MapperReduce_Hbase的优化_高可用 预分区_防止数据倾斜_JAVAAPI创建预分区---Hbase工作笔记0026
- python写csv文件按升序排列_用python给csv里的数据排序的具体代码
- 持久化存储-对象序列化(摘自网络)
- 《致云雀》(英)雪莱
- 纯html 404页面,一款纯css3实现的漂亮的404页面_html/css_WEB-ITnose
- 企业信息化规划的重要性
- 程序设计入门c语言代码,C语言程序设计 入门源代码代码集合
- pyodbc mysql_pyodbc and mySQL
- NFT的未来:RFT、数据经济和Web3堆栈创新的推动者
- SNN论文系列-ANN to SNN 学习算法
- 是谁拿走了哈萨克斯坦的油气收益?
- Excel PivotTable 使用心得手顺分享(一)
- 股票入门基础知识1:什么是股票和股份?
- 我参加第七届NVIDIA Sky Hackathon——训练ASR模型
热门文章
- python拆堆和堆叠的操作_python - 如何合并不同的DFS并堆叠值? - 堆栈内存溢出
- 收藏 | 超详细的Oracle19c安装步骤
- mysql最常用的索引_mysql常用索引
- amd显卡风扇调节_和AMD首席游戏架构师Frank Azor聊聊RX 6000系列显卡那些事儿
- Fluid 0.3 新版本正式发布:实现云原生场景通用化数据加速
- 深度学习每层的通道数如何计算_模型通道剪枝之DMCP: Differentiable Markov Channel Pruning...
- html鼠标点击切换图片,js鼠标点击图片切换效果代码分享
- dnf单机无线连接服务器,dnf单机云服务器
- 儿童吹泡泡水简单配方_儿童吹泡泡水简单配方[组图]
- 【杂谈】从GitHub上星星最多的男人开始发GitHub综述资料