技术开发 频道

Enterprise Library 2.0 :缓存应用程序块(三)

【IT168技术文档】

练习3:实现后台缓存
该练习将示范如何实现后台加载。

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

第二步 实现后台加载
1.在解决方案管理器中选择EmployeeServices.cs文件,选择View | Code菜单命令,添加如下两个方法,它们将实现在后台加载缓存。

// TODO: PopulateCache & BeginBackgroundLoad private static void PopulateCache(){ byte[] photoData = null; EmployeesDataSet dsEmployees = GetContactDetails(); if (dsEmployees == null) return; CacheManager cache = CacheFactory.GetCacheManager(); foreach (EmployeesDataSet.EmployeesRow employee in dsEmployees.Employees) { if (!cache.Contains(employee.EmployeeID.ToString())) { EmployeeDataProvider dataProvider = new EmployeeDataProvider(); photoData = dataProvider.GetEmployeePhotoData(employee.EmployeeID); cache.Add(employee.EmployeeID.ToString(), photoData); } } } private delegate void PopulateCacheDelegate(); public static void BeginBackgroundLoad(){ if (!ConnectionManager.IsOnline) return; PopulateCacheDelegate mi = new PopulateCacheDelegate(PopulateCache); mi.BeginInvoke(null, null); }

BeginBackgroundLoad方法使用一个委托在后台线程开始PopulateCache方法,它将会被.NET工作线程处理。

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

private void MainForm_Load(object sender, EventArgs e){ this.ToolStripLabel1.Text = ConnectionManager.StatusText; // Load data into the 'EmployeesDataSet'. EmployeesDataSet tempDataset = EmployeeService.GetContactDetails(); if (tempDataset != null) this.EmployeesDataSet.Merge(tempDataset); // TODO: Start loading cache in the background EmployeeService.BeginBackgroundLoad(); }


第三步 运行应用程序
1.选择Debug | Start Without Debugging菜单命令运行应用程序。
不要浏览任何雇员数据,在等待大概10秒后退出应用程序。如果应用程序在线它将尝试后台加载雇员照片,缓存存储在物理存储位置上,即持久缓存,但是与前一个练习使用了不同的PartitionName
2.在解决方案管理器中选择ConnectionManager.cs,选择View | Code菜单命令,在下面的代码中修改IsOnline属性的值。

static public bool IsOnline{ get { return false; } }


3.选择Debug | Start Without Debugging菜单命令运行应用程序。现在应用程序不再连接数据库处于离线状态,所有的雇员信息已经照片已经被缓存。

0
相关文章