本文演示如何在不同的应用程序中使用Enterprise Library - Caching Application Block模块,需要SQL Server数据库。其中包含如下三个示例:
(1)使用Caching Block提供程序性能
(2)持久化Caching
(3)实现后台Caching
通过本文的学习,你可以学会在应用程序中应用Caching机制,同时掌握在后台填充缓存。
本文由http://blog.entlib.com 开源ASP.NET博客平台小组根据EntLib HOL手册编译提供,欢迎交流。
 
练习一:使用Caching Block提高应用程序性能
范例程序演示通过caching 来加快员工数据的现实,并持久化缓存,支持offline。
 
打开ex01\begin 文件夹下的EmployeeBrowser.sln文件。然后,在SQL Server Management Studio界面打开 \Enterprise Library 4.1 HOL\CS\Caching\setup 目录下的CachingHOL.sql文件,执行里面的SQL脚本。该脚本在EntLibQuickStarts数据库中创建Employees表,并初始化部分数据。
 
范例应用程序概述
本范例程序用来展示存储在数据库中的员工信息,包括显示员工的图片。尽管应用程序在启动的时候,装载所有的员工记录,但是并不装载所有的图片信息,而是在显示特定员工信息时,才装载对应的图片。这是因为图片数据量比较大,如果在启动应用程序时,装载所有的图片数据,会严重影响启动速度。
 
检查MainForm.cs文件中的MainForm_Load 方法,该方法调用EmployeeService类,EmployeeService又调用EmployeeDataPrvoider类来获取员工数据,如下图所示。
 
 
当前,EmployeeService仅仅直接依赖EmployeeDataProvider类,下面将强化利用Caching Block,在应用程序离线的情况下,也可以运行正常。
 
选择EmployeeDataProvider.cs文件,在代码文件中找到GetEmployeePhotoData方法,GetEmployeePhotoData方法中特别添加了1秒的延迟,用来模拟访问数据的延迟。
// HACK: Emulate a slow connection to the database.
Thread.Sleep(1000);
 
现在运行范例程序,发现在浏览照片时,非常缓慢,即使你之前已经浏览过相应的照片。
 
 
 
在EmployeeService类实现缓存
1. 选择EmployeeBrowser项目,添加对如下程序集的引用。
Microsoft.Practices.EnterpriseLibrary.Caching.dll
 
2. 打开EmployeeService.cs文件,在代码中添加对Caching命名空间的引用。
using Microsoft.Practices.EnterpriseLibrary.Caching;
 
3. 对GetEmployeePhoto方法添加如下代码。
        public static Bitmap GetEmployeePhoto(Guid employeeId)
        {
            byte[] photoData = null;
 
            // Attempt to retrieve from cache
            ICacheManager cache = CacheFactory.GetCacheManager();
            photoData = (byte[])cache[employeeId.ToString()];
 
            // Retrieve from dataProvider if not in Cache
            if (photoData == null)
            {
                EmployeeDataProvider dataProvider = new EmployeeDataProvider();
                photoData = dataProvider.GetEmployeePhotoData(employeeId);
                cache.Add(employeeId.ToString(), photoData);
            }
 
            // No data found.
            if (photoData == null)
                return null;
 
            // Convert bytes to Bitmap
            using (MemoryStream ms = new MemoryStream(photoData))
            {
                return new Bitmap(ms);
            }
        }
仔细对比代码,仅仅新增了caching相关的代码机制。上述方法使用了工厂模式(Factory Pattern),和其他的Enterprise Library 的Application Block一样,创建一个新的CacheManager实例。缓存Cache可以完全在内存中,或者依托在物理存储空间,这由配置来决定。
 
4. 添加如下的代码到ClearCache方法中,允许窗体请求服务获取新的数据。
        public static void ClearCache()
        {
            ICacheManager cache = CacheFactory.GetCacheManager();
            cache.Flush();
        }
上述方法将从Cache中删除所有数据。
 
应用程序配置文件
1. 使用Enterprise Library的配置文件编辑工具,打开应用程序中app.config配置文件,添加新的Caching Application Block配置,如下图所示。
 
 
2. 选择Caching Application Block | Cache Managers | Cache Manager 节点,在属性窗口中,可以看到一些可调整的属性设置,用来调整缓存的性能。这里保留这些设置不变,如下图所示。
 
 
保存配置文件,现在配置文件中包含有缓存配置设置。可以注意到后台存储设置为Null Storage,也就是,缓存信息将保留在内存中。
 
现在运行范例程序,发现浏览员工信息的性能将发生很大变化。在第一次浏览员工信息时,因为需要从数据库中检索图片信息,因此比较缓慢,但再次访问相同员工的信息时,因为缓存中已经有数据,直接从缓存中获取信息,性能有显著改善。
 
http://www.entlib.com专业ASP.NET电子商务平台小组,欢迎你继续访问Caching Application Block学习手册。
 
参考文档:
Caching Application Block Hands-On Labs for Enterprise Library
posted on 2010-09-15 10:06  vibratea  阅读(258)  评论(0编辑  收藏  举报