由於志願採集類型、各地市報名點、以及考生層次不同,所以現場報名的確認點也是不同的。如何將這些確認點信息進行緩存以便提高網站瀏覽的速度呢?可以利用EnterpriseLibrary的文件依賴緩存技術和單件模式。代碼如下:
private static readonly Object YYQRRQLockObject = new Object(); //鎖
/// <summary>
/// 獲取報名點信息
/// </summary>
/// <param name="strSXSDM">地市代碼</param>
/// <param name="strCCDM">層次代碼</param>
/// <returns></returns>
public static ObjectBMDInfo GetBMDInfo(string strSXSDM, string strCCDM)
{
ICacheManager primitivesCache = CacheFactory.GetCacheManager();
ObjectBMDInfo dstBMDInfo;
//命名緩存文件名:志願採集類型,地市代碼,層次代碼
string CacheName = string.Format("QRDInfo_{0}_{1}_{2}", CommonSet.Type, strSXSDM, strCCDM);
// Cache中存在數據嗎?
object obj = primitivesCache.GetData(CacheName);
if (obj == null)
{
// 無數據,加鎖
lock (YYQRRQLockObject)
{
// 再次判斷, 如果沒有數據,則從數據庫中獲取數據
obj = primitivesCache.GetData(CacheName);
if (obj == null)
{
// 獲取數據集
DA_Place_Time acc = new DA_Place_Time();
dstBMDInfo = acc.GetBMDInfo(strSXSDM, strCCDM);
// 加入緩存(文件依賴和時間依賴)
string fullFileName = CommonSet.CheckCacheFile(sr.BMDRelateFile);
primitivesCache.Add(CacheName, dstBMDInfo, CacheItemPriority.Normal, null, new ICacheItemExpiration[] { new FileDependency(fullFileName) }); //將所有的緩存都依賴一個文件,也就是說,只要依賴文件右邊,那麼所有的緩存都有重新創建
return dstBMDInfo;
}
}
}
dstBMDInfo = (ObjectBMDInfo)obj;
return dstBMDInfo;
}