• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法

在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了winform wcf,winform 调用wcf,wcf 缓存,wcf,wcf是什么等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文较为详细的讲述了在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);
}

</div>

只是这种方式弹性化不太好,如果字段比较多,在界面里面就有很多这样的代码,而且如果多处有这样的解析,就不好控制解析字段名称的一致性。

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 = "会员信息报表";
}

</div>

这样处理后,解析的统一性提高了,代码也简化了很多,基本上达到了我们期望的效果。但是唯一的问题就是如果是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天后过期
  }
}

</div>

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

/// <summary>
/// 绑定列表数据
/// </summary>
private void BindData()
{
  //entity
  this.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 = "客户信息列表";
}

</div>

运行如下图所示:

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法
  • WinForm窗体调用WCF服务窗体卡死问题

相关文章

  • 2017-05-28c#远程html数据抓取实例分享
  • 2017-05-28基于C#实现的多生产者多消费者同步问题实例
  • 2017-05-28C#设置软件开机自动运行的方法(修改注册表)
  • 2017-05-28比较2个datatable内容是否相同的方法
  • 2017-05-28.net(c#)中的new关键字详细介绍
  • 2017-05-28C#实现图像反色的方法
  • 2017-05-28三十分钟快速掌握C# 6.0知识点
  • 2017-05-28C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析
  • 2017-05-28C#实现延时并自动关闭MessageBox的方法
  • 2017-05-2810个C#程序员经常用到的实用代码片段

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在Winform动态启动、控制台命令行的方法
    • C#实现用于操作wav声音文件的类实例
    • c# 冒泡排序算法(Bubble Sort) 附实例代码
    • C#中关于可空类型的小知识
    • C#词法分析器之输入缓冲和代码定位的应用分析
    • C#递归算法寻找数组中第K大的数
    • C# 对XML基本操作代码总结
    • c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
    • C# 创建、部署和调用WebService简单示例
    • C# 中文简体转繁体实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有