您的位置:首页 > 移动开发

Enterprise Library - Caching Application Block 学习手册(最新版) Part 3

2010-09-15 10:07 549 查看
本文演示如何在不同的应用程序中使用Enterprise Library - Caching Application Block模块,下面介绍了使用后台线程来装载缓存。
本文由http://blog.entlib.com 开源ASP.NET博客平台小组根据EntLib HOL手册编译提供,欢迎交流。

练习三:实现后台异步缓存
首先打开ex03\begin 目录下的EmployeeBrowser.sln 项目文件。

实现数据库服务器在线时,后台线程预先装载缓存
1. 打开项目中的EmployeeService.cs代码文件,添加如下2个方法,用来在后台装载缓存。
[align=left] private static void PopulateCache()[/align]
[align=left] {[/align]
[align=left] byte[] photoData = null;[/align]
[align=left] [/align]
[align=left] EmployeesDataSet dsEmployees = GetContactDetails();[/align]
[align=left] [/align]
[align=left] if (dsEmployees == null)[/align]
[align=left] return;[/align]
[align=left] [/align]
[align=left] ICacheManager cache = CacheFactory.GetCacheManager();[/align]
[align=left] [/align]
[align=left] foreach (EmployeesDataSet.EmployeesRow employee in dsEmployees.Employees)[/align]
[align=left] {[/align]
[align=left] if (!cache.Contains(employee.EmployeeID.ToString()))[/align]
[align=left] {[/align]
[align=left] EmployeeDataProvider dataProvider = new EmployeeDataProvider();[/align]
[align=left] photoData = dataProvider.GetEmployeePhotoData(employee.EmployeeID);[/align]
[align=left] cache.Add(employee.EmployeeID.ToString(), photoData);[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] private delegate void PopulateCacheDelegate();[/align]
[align=left] [/align]
[align=left] public static void BeginBackgroundLoad()[/align]
[align=left] {[/align]
[align=left] if (!ConnectionManager.IsOnline)[/align]
[align=left] return;[/align]
[align=left] [/align]
[align=left] PopulateCacheDelegate mi = new PopulateCacheDelegate(PopulateCache);[/align]
[align=left] mi.BeginInvoke(null, null);[/align]
}
BeginBackgroundLoad 方法使用delegate在后台线程启动PopulateCache方法。PopulateCache方法遍历所有的员工,并缓存对应的图片(注:这不是很安全,因为用户可能在另一个线程中添加或删除记录)。更好的办法是,选取部分记录,然后进行遍历并缓存。
Caching Application Block在使用缓存时,确保线程安全,因此同时从多个线程访问时,是安全的。

2. 打开MainForm.cs代码文件,找到MainForm_Load方法,添加启动后台线程工作的代码。
[align=left] private void MainForm_Load(object sender, EventArgs e)[/align]
[align=left] {[/align]
[align=left] this.ToolStripLabel1.Text = ConnectionManager.StatusText;[/align]
[align=left] [/align]
[align=left] // Load data into the 'EmployeesDataSet'.[/align]
[align=left] EmployeesDataSet tempDataset = EmployeeService.GetContactDetails();[/align]
[align=left] [/align]
[align=left] if (tempDataset != null)[/align]
[align=left] this.EmployeesDataSet.Merge(tempDataset);[/align]
[align=left] [/align]
[align=left] EmployeeService.BeginBackgroundLoad();[/align]
}

运行范例程序
1. 运行范例程序,现在不需要浏览任何员工,但需要等待约10秒,然后退出应用程序。
在应用程序在线时,后台线程将缓存员工图片。缓存保存在独立的存储区域,但是使用和上一节不同的PartitionName(partitionName="EmployeeBrowser_ex03"),这样缓存内容不会相互干扰。



2. 打开ConnectionManager.cs代码文件,修改IsOnline属性,模拟应用程序处于离线状态。
[align=left] static public bool IsOnline[/align]
[align=left] {[/align]
[align=left] get { return false; }[/align]
}

3. 再次运行范例程序,现在应用程序处于离线状态,不能访问数据库,但是所有员工的联系信息和图片都已经缓存了,因此可以顺利浏览所有员工信息。



http://www.entlib.com专业ASP.NET电子商务平台小组,欢迎你继续访问Caching Application Block学习手册。

参考文档:
Caching Application Block Hands-On Labs for Enterprise Library
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐