在我们开发基于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", "系统类型");#endregionstring 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 name="T">实体类信息</typeparam>/// <param name="service">接口服务对象</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天后过期
        }}

然后在主体界面里面,我们绑定分页控件的处理代码如下所示即可。

        /// <summary>/// 绑定列表数据/// </summary>private void BindData(){//entitythis.winGridViewPager1.DisplayColumns = displayColumns;       //this.winGridViewPager1.ColumnNameAlias = CallerFactory<ICustomerService>.Instance.GetColumnNameAlias();//字段列显示名称转义//使用缓存存储表的别名,可以有效提高二次显示速度this.winGridViewPager1.ColumnNameAlias = CacheDataUtil<CustomerInfo>.GetColumnNameAlias(CallerFactory<ICustomerService>.Instance);//字段列显示名称转义string where = GetConditionSql();PagerInfo pagerInfo = this.winGridViewPager1.PagerInfo;List<CustomerInfo> list = CallerFactory<ICustomerService>.Instance.FindWithPager(where, ref pagerInfo);this.winGridViewPager1.DataSource = new WHC.Pager.WinControl.SortableBindingList<CustomerInfo>(list);this.winGridViewPager1.PrintTitle = "客户信息列表";}

转载于:https://www.cnblogs.com/wuhuacong/p/3959334.html

在WCF数据访问中使用缓存提高Winform字段中文显示速度相关推荐

  1. 解决 王爽写的汇编语言的第七个验七- 寻址方式在结构化数据访问中的应用

    原文: 汇编语言-(第三版) 王爽-著 (实验七) 寻址方式在结构化数据访问中的应用 https://www.52pojie.cn/thread-1241289-1-1.html (出处: 吾爱破解论 ...

  2. 重做实验七 寻址方式在结构化数据访问中的应用

    先处理第一行所有数据: ;实验七 寻址方式在结构化数据访问中的应用;编程 将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整) ;结果也按照下面的格式保存在table ...

  3. 实验七 寻址方式在结构化数据访问中的应用

    下面的程序中,已经定义好了这些数据 ;实验七 寻址方式在结构化数据访问中的应用;编程 将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整) ;结果也按照下面的格式保存 ...

  4. ASP.NET企业开发框架IsLine FrameWork系列之五--DataProvider 数据访问(中)

    ASP.NET企业开发框架IsLine FrameWork系列之五--DataProvider 数据访问(中) 接上文 使用DataProvider前,需要先在web.config中配置以下节点,添加 ...

  5. 如何得到数据库中所有表字段及字段中文描述

    如何得到数据库中所有表字段及字段中文描述 以下资料,通过csdn的一位师兄从SQL版主那得到: sql中 SELECT  (case when a.colorder=1 then d.name els ...

  6. SQLSERVER得到数据库中所有表字段及字段中文描述

    如何得到数据库中所有表字段及字段中文描述 以下资料,通过csdn的一位师兄从SQL版主那得到: sql中 SELECT   (case when a.colorder=1 then d.name el ...

  7. oracle中注释都是问号?中文显示不出来问题

    转载:oracle中注释都是问号?中文显示不出来问题 - 洣水码农 - 博客园 oracle中注释都是问号?中文显示不出来问题 本人在工作中需要把开发上的库恢复到自己的虚拟机里面,然而捣鼓了许久建立好 ...

  8. 微信小程序开发11 数据预取:合理缓存提高用户体验

    你好,我是俊鹏,今天我带你学习怎么通过微信提供的数据预取能力,提高小程序的用户体验. 数据预取也叫数据预加载,顾名思义,这项能力能提前加载未来要使用的数据,然后缓存到本地.这样一来,你在使用这些数据时 ...

  9. 汇编语言:实验7寻址方式在结构化数据访问中的应用

    实验介绍 下面程序中,已经定义好了这些数据: assume cs:codesg,ds:tabledata segment db '1975','1976','1977','1978','1979',' ...

  10. 汇编语言 【大练习】寻址方式在结构化访数据访问中的应用

    题源:王爽<汇编语言>第八章 实验七 题目要求 汇编易错点 用mov赋值的时候,操作数左右写反,本来想写mov ax,5 却写成mov 5,ax 不看字节长度就直接写入,覆盖后面数据:比如 ...

最新文章

  1. linux之Vim用快捷键快速移动光标至行首和行尾
  2. LOOPS HDU - 3853(概率dp,期望)
  3. 博客园自动显示随笔标签
  4. 队列实现栈的3种方法,全都击败了100%的用户!
  5. 面向Linux的10款最佳剪贴板管理器
  6. VS2010 php 插件配置
  7. MCU——矩阵键盘扫描问题记录
  8. python科学计算之Pandas使用(三)
  9. apache部署mo_python
  10. 2021年必备procreate笔刷推荐下载
  11. 开根号的几类算法总结
  12. java 九宫格数独_玩转数独之九宫数独进阶技巧
  13. PS钢笔工具使用方法简介
  14. 信息安全工程师是什么?
  15. 回顾过去。。展望未来
  16. day09---(02)课程大纲-小节添加修改删除(前端)
  17. Excel计算将时间字符串转换为时间格式 年-月-日 时:分:秒 且计算时间差得到 时分秒 格式
  18. html渐变轮播,html简单的渐变轮播插件
  19. 异端的制作:数字人物Gawain
  20. 如何优雅的在ubuntu终端中使用复制粘贴

热门文章

  1. 逻辑运算符 用法解释
  2. iOS 3D Touch功能
  3. 《pro Spring》学习笔记之Spring HTTP 远程方法调用
  4. 这样让你的采集内容变原创seo出来的伪原创
  5. java redis 哨兵_突破Java面试(23-7) - Redis的哨兵架构
  6. Redis源码阅读 (备份机制)
  7. ubuntu16.04下ROS操作系统学习笔记(六 )机器视觉-摄像头标定-ROS+OpenCv-人脸识别-物体跟踪-二维码识别
  8. 矩阵分解(MF)方法及代码
  9. ArrayList 源码分析(JDK1.8)
  10. [dotnet]以最小的成本,落地微服务特色的DevOps管道,持续集成/部署到kubernetes。...