練習 2:持久快取
示範如何實作持久快取。
開啟 EmployeeBrowser.sln,預設路徑 C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Caching\exercises\ex02\begin,編譯。
EmployeeServices.cs,加入命名空間:using Microsoft.Practices.EnterpriseLibrary.Caching.Expirations;GetContactDetails 方法:public static EmployeesDataSet GetContactDetails()
{
EmployeesDataSet dsEmployees = null;
CacheManager cache = CacheFactory.GetCacheManager();
dsEmployees = (EmployeesDataSet)cache[CACHE_KEY];
if (dsEmployees == null && ConnectionManager.IsOnline)
{
EmployeeDataProvider dataProvider = new EmployeeDataProvider();
dsEmployees = dataProvider.GetEmployees();
AbsoluteTime expiry = new AbsoluteTime(new TimeSpan(2, 0, 0, 0)); // 2天過期
cache.Add(CACHE_KEY, dsEmployees, CacheItemPriority.High, null, new ICacheItemExpiration[] { expiry });
}
return dsEmployees;
}
GetEmployeePhoto,離線時不嘗試取得資料:public static Bitmap GetEmployeePhoto(Guid employeeId)
{
byte[] photoData = null;
CacheManager cache = CacheFactory.GetCacheManager();
photoData = (byte[])cache[employeeId.ToString()];
if (photoData == null && ConnectionManager.IsOnline)
{
EmployeeDataProvider dataProvider = new EmployeeDataProvider();
photoData = dataProvider.GetEmployeePhotoData(employeeId);
cache.Add(employeeId.ToString(), photoData);
}
if (photoData == null) return null;
using (MemoryStream ms = new MemoryStream(photoData))
return new Bitmap(ms);
}
持久快取支援離線存取,設定過期時間自動清理。