none
WinForm下想使用缓存,朋友们给点建议吧。 RRS feed

  • 问题

  • 一个winform程序,使用用户很多(大约超过2万),在一些窗体上,需要初始化ComboBox控件,该控件的DataSource是某一方法从数据库中读取的值,具体见如下代码示例。

     

        public User_Add()
        {
          InitializeComponent();
          Common.Public comm=new Common.Public();
          this.cmbDomian.DataSource = comm.GetAllDomian();
          this.cmbDomian.DisplayMember = "Domian";
          this.cmbDomian.ValueMember = "ID";
    
        }
    
    
        /// <summary>
        /// 获取所有的域列表
        /// </summary>
        /// <returns>包含所有域列表的DataTable</returns>
        public DataTable GetAllDomian()
        {
          return SqlHelper.getDataTable(SqlHelper.ConnectionString, CommandType.StoredProcedure, "EasyFastMail_Domian_GetAllList", null);
        }
    
    初步估计,如此写代码,可能会造成每秒查询1000次数据库甚至更多。现考虑设计一个缓存,将GetAllDomian()得到的DataTable缓存起来,然后供ComboBox控件使用,但是我是从b/s刚刚转向C/S开发的,目前无任何思路。求助朋友们给点参考意见。
    2010年12月10日 13:33

答案

全部回复

  • 你可以写一个web service,在客户端调用web方法的时候在web服务器上缓存。

    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP
    2010年12月11日 2:14
    版主
  • 说下我的想法:

     

    定义一个类 Cache,类中有四个方法:

    1:add——添加一个object对象在该类中。

    2:remove——删除某个object对象。

    3:get——得到某个object对象。

    4:replay——更新某个object对象。

    对数据库进行更改时,监测是否包含某个object对象,如果已存在,则更新否则就创建。 然后程序中需要读数据库时,直接读这个类的get()方法即可。

     

    但是最近写代码写迷糊了,有几个问题始终想不明白。

    1:如何保证add方法中的添加的对象可以保存到内存中?

    2:如何避免gc频繁回收这个类

    2010年12月11日 15:15
  • HttpRuntime 类的Cache可以用在Winform里面,无需自己写
    【孟子E章】
    2010年12月12日 12:39
    版主
  • 参加

    http://www.codeproject.com/KB/cs/cacheinwinformapps.aspx


    【孟子E章】
    2010年12月12日 12:40
    版主