博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Enterprise Library 2.0 Hands On Lab 翻译(11):缓存应用程序块(三)
阅读量:6399 次
发布时间:2019-06-23

本文共 2045 字,大约阅读时间需要 6 分钟。

练习3:实现后台缓存

该练习将示范如何实现后台加载。

 

第一步

打开EmployeeBrowser.sln 项目,默认的安装路径应该为C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Caching\exercises\ex03\begin,并编译。

 

第二步 实现后台加载

1
.在解决方案管理器中选择EmployeeServices.cs文件,选择View | Code菜单命令,添加如下两个方法,它们将实现在后台加载缓存。
None.gif
//
 TODO: PopulateCache & BeginBackgroundLoad
None.gif
None.gif
private
 
static
 
void
 PopulateCache()
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    
byte[] photoData = null;
InBlock.gif
InBlock.gif    EmployeesDataSet dsEmployees 
= GetContactDetails();
InBlock.gif
InBlock.gif    
if (dsEmployees == null)
InBlock.gif
InBlock.gif        
return;
InBlock.gif
InBlock.gif    CacheManager cache 
= CacheFactory.GetCacheManager();
InBlock.gif
InBlock.gif    
foreach (EmployeesDataSet.EmployeesRow employee in dsEmployees.Employees)
InBlock.gif
ExpandedSubBlockStart.gif    
{
InBlock.gif
InBlock.gif        
if (!cache.Contains(employee.EmployeeID.ToString()))
InBlock.gif
ExpandedSubBlockStart.gif        
{
InBlock.gif
InBlock.gif            EmployeeDataProvider dataProvider 
= new EmployeeDataProvider();
InBlock.gif
InBlock.gif            photoData 
= dataProvider.GetEmployeePhotoData(employee.EmployeeID);
InBlock.gif
InBlock.gif            cache.Add(employee.EmployeeID.ToString(), photoData);
InBlock.gif
ExpandedSubBlockEnd.gif        }
InBlock.gif
ExpandedSubBlockEnd.gif    }
InBlock.gif
ExpandedBlockEnd.gif}
None.gif
None.gif
private
 
delegate
 
void
 PopulateCacheDelegate();
None.gif
None.gif
public
 
static
 
void
 BeginBackgroundLoad()
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    
if (!ConnectionManager.IsOnline)
InBlock.gif
InBlock.gif        
return;
InBlock.gif
InBlock.gif
InBlock.gif    PopulateCacheDelegate mi 
= new PopulateCacheDelegate(PopulateCache);
InBlock.gif
InBlock.gif    mi.BeginInvoke(
nullnull);
InBlock.gif
ExpandedBlockEnd.gif}
BeginBackgroundLoad
方法使用一个委托在后台线程开始PopulateCache方法,它将会被.NET工作线程处理。

2
.选择MainForm.cs文件,选择View | Code菜单命令,在方法MainForm_Load中加入如下代码开始后台工作。

None.gif
private
 
void
 MainForm_Load(
object
 sender, EventArgs e)
None.gif
ExpandedBlockStart.gif
{
InBlock.gif
InBlock.gif    
this.ToolStripLabel1.Text = ConnectionManager.StatusText;
InBlock.gif
InBlock.gif
InBlock.gif    
// Load data into the 'EmployeesDataSet'.
InBlock.gif
InBlock.gif    EmployeesDataSet tempDataset 
= EmployeeService.GetContactDetails(); 
InBlock.gif
InBlock.gif    
if (tempDataset != null)
InBlock.gif
InBlock.gif        
this.EmployeesDataSet.Merge(tempDataset);
InBlock.gif
InBlock.gif    
// TODO: Start loading cache in the background
InBlock.gif
InBlock.gif    EmployeeService.BeginBackgroundLoad();
InBlock.gif
ExpandedBlockEnd.gif}
 
第三步 运行应用程序

1
.选择Debug | Start Without Debugging菜单命令运行应用程序。

不要浏览任何雇员数据,在等待大概10秒后退出应用程序。如果应用程序在线它将尝试后台加载雇员照片,缓存存储在物理存储位置上,即持久缓存,但是与前一个练习使用了不同的PartitionName

2
.在解决方案管理器中选择ConnectionManager.cs,选择View | Code菜单命令,在下面的代码中修改IsOnline属性的值。
None.gif
static
 
public
 
bool
 IsOnline
None.gif
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif    
get return false; }
ExpandedBlockEnd.gif}
3
.选择Debug | Start Without Debugging菜单命令运行应用程序。现在应用程序不再连接数据库处于离线状态,所有的雇员信息已经照片已经被缓存。

 

更多Enterprise Library的文章请参考《
本文转自lihuijun51CTO博客,原文链接: 
http://blog.51cto.com/terrylee/67642
,如需转载请自行联系原作者
你可能感兴趣的文章
【数据结构】线性表(一):顺序列表
查看>>
利用Mallet工具自动挖掘文本Topic
查看>>
Windows下oracle打补丁步骤
查看>>
Python教程(一)Python简介
查看>>
asp.net forms认证
查看>>
一帧图像的两种显示器建模方式
查看>>
Hadoop 公平调度器算法调度解析
查看>>
Linux Foundation(笔记)
查看>>
Java学习第二十五天
查看>>
vim配置
查看>>
ubuntu 把软件源修改为国内源和更新
查看>>
随机产生四则运算,导入导出文件
查看>>
位运算符
查看>>
winform自定义控件
查看>>
C#编码好习惯
查看>>
避其锋芒,侧翼出击。——司马亮创业回忆录(一)
查看>>
scope
查看>>
删除链表中储存给定值的节点
查看>>
vCPU估算的几个基本概念
查看>>
DoraCMS 源码知识点备注
查看>>