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

本文演示如何在不同的应用程序中使用Enterprise Library - Caching Application Block模块,下面介绍了使用后台线程来装载缓存。
本文由 http://blog.entlib.com 开源ASP.NET博客平台小组根据EntLib HOL手册编译提供,欢迎交流。
 
练习三:实现后台异步缓存
首先打开ex03\begin 目录下的EmployeeBrowser.sln 项目文件。
 
实现数据库服务器在线时,后台线程预先装载缓存
1. 打开项目中的EmployeeService.cs代码文件,添加如下2个方法,用来在后台装载缓存。
        private static void PopulateCache()
        {
            byte[] photoData = null;
 
            EmployeesDataSet dsEmployees = GetContactDetails();
 
            if (dsEmployees == null)
                return;
 
            ICacheManager 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 方法使用delegate在后台线程启动PopulateCache方法。PopulateCache方法遍历所有的员工,并缓存对应的图片(注:这不是很安全,因为用户可能在另一个线程中添加或删除记录)。更好的办法是,选取部分记录,然后进行遍历并缓存。
Caching Application Block在使用缓存时,确保线程安全,因此同时从多个线程访问时,是安全的。
 
2. 打开MainForm.cs代码文件,找到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);
 
            EmployeeService.BeginBackgroundLoad();
        }
 
运行范例程序
1. 运行范例程序,现在不需要浏览任何员工,但需要等待约10秒,然后退出应用程序。
在应用程序在线时,后台线程将缓存员工图片。缓存保存在独立的存储区域,但是使用和上一节不同的PartitionName(partitionName="EmployeeBrowser_ex03"),这样缓存内容不会相互干扰。
 
caching_3_1.gif
 
2. 打开ConnectionManager.cs代码文件,修改IsOnline属性,模拟应用程序处于离线状态。
        static public bool IsOnline
        {
            get { return false; }
        }
 
3. 再次运行范例程序,现在应用程序处于离线状态,不能访问数据库,但是所有员工的联系信息和图片都已经缓存了,因此可以顺利浏览所有员工信息。
 
caching_3_2.gif
 
http://www.entlib.com专业ASP.NET电子商务平台小组,欢迎你继续访问Caching Application Block学习手册。
 
参考文档:
Caching Application Block Hands-On Labs for Enterprise Library

转载于:https://www.cnblogs.com/vibratea/archive/2010/09/15/1826715.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值