欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在WCF數(shù)據(jù)訪問中使用緩存提高Winform字段中文顯示速度的方法

 更新時間:2014年09月06日 15:37:40   投稿:shichen2014  
這篇文章主要介紹了在WCF數(shù)據(jù)訪問中使用緩存提高Winform字段中文顯示速度的方法,是非常實用的功能,需要的朋友可以參考下

本文較為詳細的講述了在WCF數(shù)據(jù)訪問中使用緩存提高Winform字段中文顯示速度的方法,分享給大家供大家參考之用。具體方法如下:

在我們開發(fā)基于WCF訪問方式的Winform程序的時候,一般情況下需要對界面顯示的字段進行中文顯示的解析。如果是硬編碼進行中文顯示,那么除了不方便調(diào)整及代碼臃腫外,性能上沒有什么問題,但是不建議這樣處理;一般情況下,我們把中文對照信息放到業(yè)務(wù)類里面去統(tǒng)一解析,但是這樣會導(dǎo)致每次WCF訪問方式請求解析中文化的操作耗費一定的響應(yīng)時間。如果使用緩存存儲中文字段的對照表,那么就不用每次請求WCF的數(shù)據(jù)訪問,減少一些響應(yīng)時間的消耗,提高用戶體驗效果。

1、使用硬編碼方式的中文化解析操作

硬編碼的方式,中文化字段的操作,是在本地進行的,一般響應(yīng)會比較快,如下代碼所示。

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", "系統(tǒng)類型");

  #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、中文化統(tǒng)一解析操作

為了克服第一種方案的弊端,我們可以把中文化參考的操作移到底層DAL去實現(xiàn),高一層的接口,只需要調(diào)用它進行解析(方法GetColumnNameAlias)就可以了。

/// <summary>
/// 綁定列表數(shù)據(jù)
/// </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();//字段列顯示名稱轉(zhuǎn)義

  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 = "會員信息報表";
}

這樣處理后,解析的統(tǒng)一性提高了,代碼也簡化了很多,基本上達到了我們期望的效果。但是唯一的問題就是如果是WCF的數(shù)據(jù)訪問方式,那么每次訪問都會耗費一定的處理時間。

如果我們使用緩存,第二次直接從本地獲取,那么速度會提高很多,特別是表的字段參照對象比較多的時候,性能提高更加明顯。

3、使用緩存的操作處理

由于.NET提供了MemoryCache對象給我們進行緩存的處理,我們利用它就可以很好實現(xiàn)了,為了方便,我們可以對它進行一定的封裝后在使用。

首先,我們希望封裝后提供一個通用的對字段中文化的處理函數(shù),傳入相應(yīng)的參數(shù)就可以了。因此先封裝好一個輔助類。

/// <summary>
/// 提供一些常見操作的緩存處理
/// </summary>
public class CacheDataUtil<T> where T : BaseEntity
{
  /// <summary>
  /// 獲取指定對象的別名
  /// </summary>
  /// <typeparam name="T">實體類信息</typeparam>
  /// <param name="service">接口服務(wù)對象</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>
/// 綁定列表數(shù)據(jù)
/// </summary>
private void BindData()
{
  //entity
  this.winGridViewPager1.DisplayColumns = displayColumns;    
  //this.winGridViewPager1.ColumnNameAlias = CallerFactory<ICustomerService>.Instance.GetColumnNameAlias();//字段列顯示名稱轉(zhuǎn)義
  //使用緩存存儲表的別名,可以有效提高二次顯示速度
  this.winGridViewPager1.ColumnNameAlias = CacheDataUtil<CustomerInfo>.GetColumnNameAlias(CallerFactory<ICustomerService>.Instance);//字段列顯示名稱轉(zhuǎn)義

  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 = "客戶信息列表";
}

運行如下圖所示:

相關(guān)文章

  • C#使用foreach語句遍歷集合類型的方法

    C#使用foreach語句遍歷集合類型的方法

    這篇文章主要介紹了C#使用foreach語句遍歷集合類型的方法,可實現(xiàn)通過foreach語句遍歷集合類的功能,需要的朋友可以參考下
    2015-06-06
  • C#多線程編程中的鎖系統(tǒng)(三)

    C#多線程編程中的鎖系統(tǒng)(三)

    這篇文章主要介紹了C#多線程編程中的鎖系統(tǒng)(三),本本文主要說下基于內(nèi)核模式構(gòu)造的線程同步方式、事件、信號量以及WaitHandle、AutoResetEvent、ManualResetEvent等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C# BeginInvoke實現(xiàn)異步編程方式

    C# BeginInvoke實現(xiàn)異步編程方式

    這篇文章主要介紹了C# BeginInvoke實現(xiàn)異步編程方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Unity實現(xiàn)引導(dǎo)頁效果

    Unity實現(xiàn)引導(dǎo)頁效果

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)引導(dǎo)頁效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Unity中 mesh生成斜坡的示例代碼

    Unity中 mesh生成斜坡的示例代碼

    Mesh是指模型的網(wǎng)格,3D模型是由多邊形拼接而成,而多邊形實際上是由多個三角形拼接而成的,今天通過本文給大家介紹Unity中 mesh生成斜坡功能,感興趣的朋友一起看看吧
    2021-05-05
  • C#語法相比其它語言比較獨特的地方(三)

    C#語法相比其它語言比較獨特的地方(三)

    這篇文章主要介紹了C#語法相比其它語言比較獨特的地方(三),本文講解了在C++中允許從一個case貫穿到另一個case標簽、as和is只會檢測待轉(zhuǎn)化類型的類型,而不會進行其它操作等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • c# 以二進制讀取文本文件

    c# 以二進制讀取文本文件

    在當前目錄創(chuàng)建一個文件myfile.txt,對該文件具有讀寫權(quán)限
    2009-07-07
  • c# 實現(xiàn)發(fā)送郵件到指定郵箱

    c# 實現(xiàn)發(fā)送郵件到指定郵箱

    這篇文章主要介紹了c# 如何實現(xiàn)發(fā)送郵件到指定郵箱,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-03-03
  • 詳解C#中線程傳參,返回值和多線程沖突問題的解決

    詳解C#中線程傳參,返回值和多線程沖突問題的解決

    這篇文章主要為大家詳細介紹了C#中線程傳參,返回值和多線程沖突問題的解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • WPF自定義控件實現(xiàn)ItemsControl魚眼效果

    WPF自定義控件實現(xiàn)ItemsControl魚眼效果

    這篇文章主要為大家詳細介紹了WPF如何通過自定義控件實現(xiàn)ItemsControl魚眼效果,文中的示例代碼講解詳細,需要的可以參考一下
    2024-01-01

最新評論