- 浏览: 476868 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (1028)
- [发布至博客园首页] (826)
- [随笔分类]个人生活随笔 (14)
- [网站分类]首页候选区 (26)
- [网站分类]SharePoint (15)
- [网站分类]其他技术区 (6)
- [随笔分类]批处理技巧 (6)
- [随笔分类].net 2.0 (3)
- [随笔分类]SharePoint2007(MOSS2007) (0)
- [网站分类].NET新手区 (6)
- [网站分类]ASP.NET (6)
- [网站分类]架构设计 (18)
- [网站分类]程序人生 (2)
- [网站分类]SQL Server (2)
- WCF (3)
- 编程技巧 (2)
- 模式架构 (2)
- 分析设计 (4)
- 生活随笔 (0)
- 软件工程 (1)
- Android实例 (2)
最新评论
-
zilong0536:
楼主您好:
请问发表博文支持图片的功能怎么实现啊,一直没有思路 ...
新浪微博开放平台开发-android客户端(3) -
nicegege:
小弟 学习了
帮助中国移动设计10086的排队小模块 -
zl7824516:
用什么技术没说啊
通告(公告),消息(站内短信),提醒的设计:通告 -
virusswb:
源码下载: SinaWeibo2 源码下载之后,将后缀改为ra ...
新浪微博开放平台开发-android客户端(3) -
Jimmyxu0311:
找不到源码下载
新浪微博开放平台开发-android客户端(3)
本节介绍开发者在使用缓存的时候,常用的方法。每个方法在实际开发中都可以找到对应的用处,会有代码示例。分两个部分介绍,第一个部分包括下面的一些用法:
- 向缓存添加数据,Add方法,如何向缓存中添加数据,设置过期,设置优先级。
- 从缓存中删除数据,Remove方法
- 从缓存中获取数据,GetData方法
- 清空缓存,Flush方法
第二部分介绍缓存的加载。
1.1向缓存中添加数据
需要缓存的数据,在创建和传输的时候都是很消耗性能的。例如,一个零售商的应用系统,一些列产品数据需要从数据访问组件传递给用户显示组件,然后才可以显示在用户界面。代表显示世界的实体类Products和Orders,为了提升性能,一些数据会被放在缓存中。
你需要向缓存中添加数据,同时为过期处理提供过期时间,为清除处理设置缓存的优先级,先清除优先级低的缓存项。
使用CacheManager的Add方法,如果你没有设置过期时间和优先级,会自动设置默认值,分别是NeverExpired永不过期和Normal正常。如果缓存中已经存在相同key的项,会先移除旧项,然后添加新项。在这个过程中如果失败的话,缓存值会恢复到原始值。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Practices.EnterpriseLibrary.Caching;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;
namespace BeautyCode.Entlib
{
public class Product
{
public string ID { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public class CacheTest
{
public CacheTest()
{
ICacheManager manager = CacheFactory.GetCacheManager();
string id = "11";
string name = "土豆";
decimal price = 100;
Product product = new Product() { ID = id, kName = name, Price = price };
manager.Add(id, product, CacheItemPriority.Normal,null,new SlidingTime (TimeSpan.FromMinutes (5)));
}
}
}
在上面的代码中,通过Add方法向缓存中添加数据,设置优先级为Normal,过期之后没有激活任何事件,过期时间为最后一次访问之后的5分钟。
在删除项的时候响应删除事件,更新缓存。
在Add方法中,我们可以指定一个实现了ICacheItemRefreshAction接口的类方法,当从缓存中删除项的时候,就会更新缓存的数据。
public class ProductCacheRefeshAction : ICacheItemRefreshAction
{
#region ICacheItemRefreshAction Members
public void Refresh(string removedKey, object expiredValue, CacheItemRemovedReason removalReason)
{
throw new NotImplementedException();
}
#endregion
}
如果要接收移除缓存项的通知的话,需要在Add方法中设置参数
要点:
- 你可以使用整合Unity的方式创建对象实例。
- 如果向配置了使用数据库作为后端存储的缓存中添加项的话,添加的项必须是可序列化的,添加Serializable特性。
- 当使用数据库作为后端存储的时候,实现ICacheItemRefreshAction的类必须要可序列化,添加Serializable特性。
1.2从缓存中删除项
根据添加项的时候设置的扫描策略和过期策略,扫描和过期处理会自动从缓存中删除项。你也可以手动移除某些项。
{
cache.Remove(key);
}
1.3从缓存中获取数据
使用CacheManager的GetData方法
{
return (T)cache.GetData(key);
}
1.4清空缓存
使用CacheManager的Flush方法,将会清空缓存中的全部项,不管有没有过期。
{
cache.Flush();
}
2、向缓存加载数据
在你从缓存获取数据之前,需要先向缓存中添加一些数据。你可以通过两种方式加载数据:
- 一次性加载,一次性将所需的数据加载到缓存中,方便后面的时候
- 根据请求加载,当发生数据请求的时候才加载数据到缓存
2.1一次性加载
当应用启动的时候,一次性加载需要的数据。
优点:
因为你可以确保数据已经被加载到缓存中,理论上你不用判断缓存的状态。但是,在获取数据之前需要检查数据是否存在于缓存中,因为有可能缓存被清空了。
因为你使用缓存,应用的性能会提升,应用的响应也会更快。
缺点:
一次性缓存全部数据,没有最大的提升系统的性能,因为花费时间缓存的数据,包括了一些没有必要的数据。如果应用有100个处理请求,登录者登录之后只是处理了1个,那么其他缓存的请求就没有必要了。
推荐的一次性加载方式
当你在应用启动或者初始化的时候一次性家在大量数据的话,最好使用后台线程进行异步加载,如果你不正确的使用一次性加载的方式,你的应用在初始化的时候会很慢。在下面的情形, 推荐使用一次性加载。
- 对加载的数据的生命周期可控
- 对加载的数据量可控,如果不知道要加载多少数据量的话,你有可能会耗尽系统的资源
2.2根据请求加载数据
优点:
在应用初始化的时候,因为没有加载大量的数据,系统资源没有耗尽。不用加载一些不需要的数据。
缺点:
使用的时候,性能会有点下降,因为请求的数据可能没有被缓存,而是从数据源获取然后缓存。在从缓存中获取之前,也需要检查数据是否已经存在于缓存中。这种检查可能会在你的代码中加入过量的条件逻辑。
推荐的根据请求加载数据的方式
- 你需要一些数据,但是没有资源加载保存全部的数据
- 你需要的数据在初始化系统的时候不能加载,例如数据可能和用户输入的项有关系,例如用户的一些信息。
一次性加载数据到缓存的代码示例
{
return new List<Product>();
}
public void LoadAllProducts()
{
ICacheManager manager = CacheFactory.GetCacheManager();
List<Product> list = GetProductList();
foreach (Product p in list)
{
manager.Add(p.ID, p);
}
}
下面是一段根据请求加载数据到缓存的代码示例
{
return new Product();
}
public Product ReadProductByID(string productID)
{
ICacheManager manager = CacheFactory.GetCacheManager();
Product p = (Product)manager.GetData(productID);
if (p == null)
{
p = GetByID(productID);
if (p != null)
manager.Add(productID, p);
}
return p;
}
首先检查缓存中是否存在相同key的项,如果没有就从数据源获取,然后加入缓存并且返回数据。
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
发表评论
-
NET 应用架构指导 V2 学习笔记(十六) 服务层设计指导
2010-06-04 00:13 528如果你的应用是通 ... -
NET 应用架构指导 V2 学习笔记(十七) 组件设计指导
2010-06-05 00:48 631组件提供了一种将 ... -
NET 应用架构指导 V2 学习笔记(十八) 表现层组件设计指导
2010-06-05 21:09 498本章讲述的是你在设计用户界面组件和表现层逻辑组件的时候应该 ... -
NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
2010-06-06 06:15 5655 决定数据绑定的 ... -
NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
2010-06-07 06:58 586前言 业务组件 ... -
微软企业库5.0学习笔记(四十二)异常处理模块
2010-06-14 00:04 811企业库的异常处理 ... -
关于程序员在30岁、35岁之后怎么办的新思考
2010-06-14 10:40 600首先给大家问个好 ... -
NET 应用架构指导 V2 学习笔记(二十四) 跨层关注问题
2010-06-17 20:00 557概况 大部分的 ... -
微软企业库5.0学习笔记(四十三)数据验证模块
2010-06-19 08:07 969概况 任何接受用户或者是其他系统输入的应用,一定要确保 ... -
关于项目进度慢的思考----如何提高整体开发效率
2010-06-21 23:42 775我们都是软件行业 ... -
微软企业库5.0学习笔记(四十四)实战数据验证模块
2010-06-23 19:22 8001 在业务对象上添加验证 添加对程序集【Microso ... -
微软企业库5.0学习笔记(四十五)实战数据验证模块----高级篇
2010-06-24 19:41 9541、添加自定义的提示信息 验证失败的提示信息可以自定义 ... -
面向对象类设计的五大原则(一)单一职责原则Single Responsibility Principle
2010-06-29 15:45 741引言 面向对象类设计,或者说是面向对象设计,有五大原则 ... -
《深入浅出设计模式-中文版》读书笔记 开篇乱弹(一)
2010-07-01 06:42 627oreilly的《Head.First ... -
《深入浅出设计模式-中文版》读书笔记-继承与组合(三)
2010-07-03 16:53 582经过上一次的改造 ... -
《深入浅出设计模式-中文版》读书笔记-观察者模式(四)
2010-07-06 06:34 606今天要接触的是观 ... -
利用attribute实现简单的ORM
2010-07-09 15:27 652我不知道NH的ORM具 ... -
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
2010-07-14 13:02 790题外话 最近已经在努力学习了,学习基本功,学习设计模式 ... -
《深入浅出设计模式-中文版》读书笔记-工厂模式(五)
2010-07-16 12:46 673今天给大家带来的是:工厂模式。 我们在代码中创建一个对 ... -
Head.First.Object-Oriented.Design.and.Analysis《深入浅出面向对象的分析与设计》读书笔记(一)
2010-07-18 21:47 642题外话 又是一本Head.First系列的书,这个系列 ...
相关推荐
5 - 扩展 Enterprise Library (0%) 6 - 与 Enterprise Library 一起使用组策略和 WMI (0%) 7 - 缓存应用程序块 (100%, 移植中) 8 - 加密应用程序块 (100%) 9 - 数据访问应用程序块 (100%) 10 - 异常处理应用...
DMA/Bridge Subsystem for PCI Express v4.1 读书笔记 (中文) XDMA 参考文档:PG195, https://github.com/Xilinx/dma_ip_drivers, https://support.xilinx.com/s/article/65443?language=en_US XDMA IP核的中文...
2017Andrew NG Deeplearning Coursera深度学习笔记v4.1
Microsoft Enterprise Library 4.1(企业库)验证模块,Enterprise Library 4.1中文帮助文档,各种验证方法、参数说明。
Framework 3.5 开发一套企业库,目前最新版本为 v4.1,共包括 9 个 Application Block,包括 数据访问(Data Access Application Block)、异常管理(Exception Handling Application Block)、 数据验证...
Enterprise Library4.1安装包下载
CISCO ACS 4.1搭建笔记总结:自己总结,自己安装,自己做笔记!希望能帮助大家!
NULL 博文链接:https://ghl116.iteye.com/blog/1184028
最新版 Enterprise Library 企业库 V4.1 中文学习手册
Coursera深度学习笔记v4.1.rar。学习交流使用,勿做商业用途!
Java课程所有学习笔记4.1.md
Enterprise Library 企业库 V4.1 中文学习手册与前面上传的part1是一起的,可用于ELB5.0 的学习
最新版 Enterprise Library 企业库 V4.1 中文学习手册,与最新版的ELB5.0基本一样,ELB5.0只是代码的重写。
MVC3+EF4.1学习系列(一)创建EF4.1_code_first
Ex_DUI 4.1 学习笔记之简单仿未闻花名第五期盒子UI