由于志愿采集类型、各地市报名点、以及考生层次不同,所以现场报名的确认点也是不同的。如何将这些确认点信息进行缓存以便提高网站浏览的速度呢?可以利用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;
}