本文较为详细的讲述了在WCF数据访谒中使用缓存提高Winform字段中文显示速度的要领,分享给大家供大家参考之用。具体要领如下:
在我们开发基于WCF访谒方法的Winform措施的时候,一般情况下需要对界面显示的字段进行中文显示的解析。如果是硬编码进行中文显示,那么除了未便利调解及代码痴肥外,性能上没有什么问题,但是不建议这样措置惩罚惩罚;一般情况下,我们把中文比较信息放到业务类里面去统一解析,但是这样会导致每次WCF访谒方法请求解析中文化的操纵耗费必然的响应时间。如果使用缓存存储中文字段的比较表,那么就不用每次请求WCF的数据访谒,减少一些响应时间的消耗,提高用户体验效果。
1、使用硬编码方法的中文化解析操纵
硬编码的方法,,中文化字段的操纵,是在本地进行的,一般响应会对照快,如下代码所示。
public void BindData() { #region 添加别号解析 this.winGridViewPager1.DisplayColumns = "ID,User_ID,LoginName,FullName,Note,IPAddress,MacAddress,SystemType_ID,LastUpdated"; this.winGridViewPager1.AddColumnAlias("ID", "编号"); this.winGridViewPager1.AddColumnAlias("User_ID", "登录用户ID"); this.winGridViewPager1.AddColumnAlias("LoginName", "登录名"); this.winGridViewPager1.AddColumnAlias("FullName", "真实名称"); this.winGridViewPager1.AddColumnAlias("Note", "日志描述"); this.winGridViewPager1.AddColumnAlias("IPAddress", "IP地点"); this.winGridViewPager1.AddColumnAlias("MacAddress", "Mac地点"); this.winGridViewPager1.AddColumnAlias("LastUpdated", "记录日期"); this.winGridViewPager1.AddColumnAlias("SystemType_ID", "系统类型"); #endregion string where = GetConditionSql(); PagerInfo pagerInfo = this.winGridViewPager1.PagerInfo; List<LoginLogInfo> list = CallerFactory<ILoginLogService>.Instance.FindWithPager(where, ref pagerInfo); this.winGridViewPager1.DataSource = new WHC.Pager.WinControl.SortableBindingList<LoginLogInfo>(list); }
只是这种方法弹性化不太好,如果字段对照多,在界面里面就有很多这样的代码,而且如果多处有这样的解析,就欠好控制解析字段名称的一致性。
2、中文化统一解析操纵
为了克服第一种方案的毛病,我们可以把中文化参考的操纵移到底层DAL去实现,高一层的接口,只需要挪用它进行解析(要领GetColumnNameAlias)就可以了。
/// <summary> /// 绑定列表数据 /// </summary> private void BindData() { this.winGridViewPager1.DisplayColumns = "HandNo,CardNo,CardStatus,CardGrade,Name,Sex,Telephone,Mobile,OpenDate,ValidateDate,Discount,Balance,MaxCount,Creator,CreateTime"; this.winGridViewPager1.ColumnNameAlias = CallerFactory<IMemberService>.Instance.GetColumnNameAlias();//字段列显示名称转义 string where = GetConditionSql(); List<MemberInfo> list = CallerFactory<IMemberService>.Instance.FindWithPager(where, this.winGridViewPager1.PagerInfo); this.winGridViewPager1.DataSource = new WHC.Pager.WinControl.SortableBindingList<MemberInfo>(list); this.winGridViewPager1.PrintTitle = "会员信息报表"; }
这样措置惩罚惩罚后,解析的统一性提高了,代码也简化了很多,根基上到达了我们期望的效果。但是独一的问题就是如果是WCF的数据访谒方法,那么每次访谒城市耗费必然的措置惩罚惩罚时间。
如果我们使用缓存,第二次直接从本地获取,那么速度会提高很多,出格是表的字段参照东西对照多的时候,性能提高越发明显。
3、使用缓存的操纵措置惩罚惩罚
由于.NET供给了MemoryCache东西给我们进行缓存的措置惩罚惩罚,我们操作它就可以很好实现了,为了便利,我们可以对它进行必然的封装后在使用。
首先,我们但愿封装后供给一个通用的对字段中文化的措置惩罚惩罚函数,传入相应的参数就可以了。因此先封装好一个帮助类。
/// <summary> /// 供给一些常见操纵的缓存措置惩罚惩罚 /// </summary> public class CacheDataUtil<T> where T : BaseEntity { /// <summary> /// 获取指定东西的别号 /// </summary> /// <typeparam>实体类信息</typeparam> /// <param>接口处事东西</param> /// <returns></returns> public static Dictionary<string, string> GetColumnNameAlias(IBaseService<T> service) { System.Reflection.MethodBase method = System.Reflection.MethodBase.GetCurrentMethod(); string key = string.Format("{0}-{1}-{2}", method.DeclaringType.FullName, method.Name, typeof(T).Name); return MemoryCacheHelper.GetCacheItem<Dictionary<string, string>>( key, delegate() { return service.GetColumnNameAlias(); }, new TimeSpan(24, 0, 0));//24小时,即1天后过期 } }
然后在主体界面里面,我们绑定分页控件的措置惩罚惩罚代码如下所示即可。