在写完与之后,觉得程序还是有可以优化的地方,在我中也提到了cache,所以今天这一篇主要把cache加入到项目中来,以便最大程度上提高程序的性能。
1 ///2 /// 从文件中反序列化到实体 3 /// 4 /// 5 /// 6 private IConfiger LoadConfigFile(string fileName, Type type) 7 { 8 this.configType = type; 9 fileChangeTime[fileName] = File.GetLastWriteTime(fileName);10 return ConfigSerialize.DeserializeInfo(fileName, this.configType);11 }12 ///13 /// 加载配置文14 /// 15 /// 文件名16 /// ʵ实体类型17 ///18 internal IConfiger LoadConfig(string fileName, Type type)19 {20 return LoadConfig(fileName, type, true);21 }22 23 /// 24 /// 加载配置文件25 /// 26 /// 文件名27 /// 实体类型28 /// 是否要从缓存读取29 ///30 internal IConfiger LoadConfig(string fileName, Type type, bool isCache)31 {32 if (!isCache)33 return LoadConfigFile(fileName, type);34 lock (lockHelper)35 {36 if (DataCache.GetCache(fileName) == null)37 DataCache.SetCache(fileName, LoadConfigFile(fileName, type));38 DateTime newfileChangeTime = File.GetLastWriteTime(fileName);39 if (!newfileChangeTime.Equals(fileChangeTime[fileName]))40 {41 DataCache.SetCache(fileName, LoadConfigFile(fileName, type));42 return LoadConfigFile(fileName, type);43 }44 else45 {46 return DataCache.GetCache(fileName) as IConfiger;47 }48 }49 }
实事上,使用cache使用的流程是:如果cache里没有文件的缓存,就向从文件缓存到cache,再判断是否文件被修改过,如果没有直接返回cache中的实体配置信息,如果文件已经被修改,就从文件中取回,并同时存入缓存。
以下是.net cache的操作功能类代码:
1 namespace ConfigCache 2 { 3 public class DataCache 4 { 5 ///6 /// 得到cache键所对应的值 7 /// 8 /// 9 ///10 public static object GetCache(string CacheKey)11 {12 System.Web.Caching.Cache objCache = HttpRuntime.Cache;13 return objCache[CacheKey];14 }15 /// 16 /// 将指定值设置到cache键上17 /// 18 /// 键19 /// 值20 public static void SetCache(string CacheKey, object objObject)21 {22 System.Web.Caching.Cache objCache = HttpRuntime.Cache;23 objCache.Insert(CacheKey, objObject);24 }25 ///26 /// 将指定值设置到cache键上27 /// 28 /// 键29 /// 值30 /// 绝对过期时间31 /// 相对过期时间32 public static void SetCache(string CacheKey, object objObject, DateTime absoluteExpiration, TimeSpan slidingExpiration)33 {34 System.Web.Caching.Cache objCache = HttpRuntime.Cache;35 objCache.Insert(CacheKey, objObject, null, absoluteExpiration, slidingExpiration);36 }37 38 ///39 /// 移除指定cache键40 /// 41 /// 42 public static void RemoveCache(string CacheKey)43 {44 System.Web.Caching.Cache objCache = HttpRuntime.Cache;45 objCache.Remove(CacheKey);46 47 }48 49 } }
这下子,应该有的都有了,业务分别了,性能也上去了,咱们的服务型配置文件的实现也就讲完了,呵呵,各位晚安了!